{
  "id": "1c3cae9d728c6ca2bfaf7cd13a3346f5",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.11",
  "solcLongVersion": "0.6.11+commit.5ef660b1",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/core/pool/v1/Pool.sol": {
        "content": "// SPDX-License-Identifier: AGPL-3.0-or-later // hevm: flattened sources of contracts/core/pool/v1/Pool.sol\npragma solidity =0.6.11 >=0.6.0 <0.8.0 >=0.6.2 <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/loan/v1/interfaces/ILoanFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from  \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { IBasicFDT } from \"../../../funds-distribution-token/v1/interfaces/IBasicFDT.sol\"; */\n\ninterface ILoanFDT is IBasicFDT {\n\n    /**\n        @dev The `fundsToken` (dividends).\n     */\n    function fundsToken() external view returns (IERC20);\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        @dev Withdraws all available funds for a token holder.\n    */\n    function withdrawFunds() external override;\n\n}\n\n////// contracts/core/loan/v1/interfaces/ILoan.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { ILoanFDT } from \"./ILoanFDT.sol\"; */\n\ninterface ILoan is ILoanFDT {\n\n    /**\n        Ready      = The Loan has been initialized and is ready for funding (assuming funding period hasn't ended).\n        Active     = The Loan has been drawdown and the Borrower is making payments.\n        Matured    = The Loan is fully paid off and has \"matured\".\n        Expired    = The Loan did not initiate, and all funding was returned to Lenders.\n        Liquidated = The Loan has been liquidated.\n     */\n    enum State { Ready, Active, Matured, Expired, Liquidated }\n\n    /**\n        @dev   Emits an event indicating the Loan was funded.\n        @param fundedBy     The Pool that funded the Loan.\n        @param amountFunded The amount the Loan was funded for.\n     */\n    event LoanFunded(address indexed fundedBy, uint256 amountFunded);\n\n    /**\n        @dev   Emits an event indicating the balance for an account was updated.\n        @param account The address of an account.\n        @param token   The token address of the asset.\n        @param balance The new balance of `token` for `account`.\n     */\n    event BalanceUpdated(address indexed account, address indexed token, uint256 balance);\n\n    /**\n        @dev   Emits an event indicating the some loaned amount was drawn down.\n        @param drawdownAmount The amount that was drawn down.\n     */\n    event Drawdown(uint256 drawdownAmount);\n\n    /**\n        @dev   Emits an event indicating the state of the Loan changed.\n        @param state The state of the Loan.\n     */\n    event LoanStateChanged(State state);\n\n    /**\n        @dev   Emits an event indicating the an Admin for the Loan was set.\n        @param loanAdmin The address of some Loan Admin.\n        @param allowed   Whether `loanAdmin` is a Loan Admin for this Loan.\n     */\n    event LoanAdminSet(address indexed loanAdmin, bool allowed);\n\n    /**\n        @dev   Emits an event indicating the a payment was made for the Loan.\n        @param totalPaid         The total amount paid.\n        @param principalPaid     The principal portion of the amount paid.\n        @param interestPaid      The interest portion of the amount paid.\n        @param paymentsRemaining The amount of payment remaining.\n        @param principalOwed     The outstanding principal of the Loan.\n        @param nextPaymentDue    The timestamp of the due date of the next payment.\n        @param latePayment       Whether this payment was late.\n     */\n    event PaymentMade(\n        uint256 totalPaid,\n        uint256 principalPaid,\n        uint256 interestPaid,\n        uint256 paymentsRemaining,\n        uint256 principalOwed,\n        uint256 nextPaymentDue,\n        bool latePayment\n    );\n\n    /**\n        @dev   Emits an event indicating the the Loan was liquidated.\n        @param collateralSwapped      The amount of Collateral Asset swapped.\n        @param liquidityAssetReturned The amount of Liquidity Asset recovered from swap.\n        @param liquidationExcess      The amount of Liquidity Asset returned to borrower.\n        @param defaultSuffered        The remaining losses after the liquidation.\n     */\n    event Liquidation(\n        uint256 collateralSwapped,\n        uint256 liquidityAssetReturned,\n        uint256 liquidationExcess,\n        uint256 defaultSuffered\n    );\n\n    /**\n        @dev The current state of this Loan, as defined in the State enum below.\n     */\n    function loanState() external view returns (State);\n\n    /**\n        @dev The asset deposited by Lenders into the FundingLocker, when funding this Loan.\n     */\n    function liquidityAsset() external view returns (IERC20);\n\n    /**\n        @dev The asset deposited by Borrower into the CollateralLocker, for collateralizing this Loan.\n     */\n    function collateralAsset() external view returns (IERC20);\n\n    /**\n        @dev The FundingLocker that holds custody of Loan funds before drawdown.\n     */\n    function fundingLocker() external view returns (address);\n\n    /**\n        @dev The FundingLockerFactory.\n     */\n    function flFactory() external view returns (address);\n\n    /**\n        @dev The CollateralLocker that holds custody of Loan collateral.\n     */\n    function collateralLocker() external view returns (address);\n\n    /**\n        @dev The CollateralLockerFactory.\n     */\n    function clFactory() external view returns (address);\n\n    /**\n        @dev The Borrower of this Loan, responsible for repayments.\n     */\n    function borrower() external view returns (address);\n\n    /**\n        @dev The RepaymentCalc for this Loan.\n     */\n    function repaymentCalc() external view returns (address);\n\n    /**\n        @dev The LateFeeCalc for this Loan.\n     */\n    function lateFeeCalc() external view returns (address);\n\n    /**\n        @dev The PremiumCalc for this Loan.\n     */\n    function premiumCalc() external view returns (address);\n\n    /**\n        @dev The LoanFactory that deployed this Loan.\n     */\n    function superFactory() external view returns (address);\n\n    /**\n        @param  loanAdmin The address of some admin.\n        @return Whether the `loanAdmin` has permission to do certain operations in case of disaster management.\n     */\n    function loanAdmins(address loanAdmin) external view returns (bool);\n\n    /**\n        @dev The unix timestamp due date of the next payment.\n     */\n    function nextPaymentDue() external view returns (uint256);\n\n    /**\n        @dev The APR in basis points.\n     */\n    function apr() external view returns (uint256);\n\n    /**\n        @dev The number of payments remaining on the Loan.\n     */\n    function paymentsRemaining() external view returns (uint256);\n\n    /**\n        @dev The total length of the Loan term in days.\n     */\n    function termDays() external view returns (uint256);\n\n    /**\n        @dev The time between Loan payments in seconds.\n     */\n    function paymentIntervalSeconds() external view returns (uint256);\n\n    /**\n        @dev The total requested amount for Loan.\n     */\n    function requestAmount() external view returns (uint256);\n\n    /**\n        @dev The percentage of value of the drawdown amount to post as collateral in basis points.\n     */\n    function collateralRatio() external view returns (uint256);\n\n    /**\n        @dev The timestamp of when Loan was instantiated.\n     */\n    function createdAt() external view returns (uint256);\n\n    /**\n        @dev The time for a Loan to be funded in seconds.\n     */\n    function fundingPeriod() external view returns (uint256);\n\n    /**\n        @dev The time a Borrower has, after a payment is due, to make a payment before a liquidation can occur.\n     */\n    function defaultGracePeriod() external view returns (uint256);\n\n    /**\n        @dev The amount of principal owed (initially the drawdown amount).\n     */\n    function principalOwed() external view returns (uint256);\n\n    /**\n        @dev The amount of principal that has been paid by the Borrower since the Loan instantiation.\n     */\n    function principalPaid() external view returns (uint256);\n\n    /**\n        @dev The amount of interest that has been paid by the Borrower since the Loan instantiation.\n     */\n    function interestPaid() external view returns (uint256);\n\n    /**\n        @dev The amount of fees that have been paid by the Borrower since the Loan instantiation.\n     */\n    function feePaid() external view returns (uint256);\n\n    /**\n        @dev The amount of excess that has been returned to the Lenders after the Loan drawdown.\n     */\n    function excessReturned() external view returns (uint256);\n\n    /**\n        @dev The amount of Collateral Asset that has been liquidated after default.\n     */\n    function amountLiquidated() external view returns (uint256);\n\n    /**\n        @dev The amount of Liquidity Asset that has been recovered after default.\n     */\n    function amountRecovered() external view returns (uint256);\n\n    /**\n        @dev The difference between `amountRecovered` and `principalOwed` after liquidation.\n     */\n    function defaultSuffered() external view returns (uint256);\n\n    /**\n        @dev The amount of Liquidity Asset that is to be returned to the Borrower, if `amountRecovered > principalOwed`.\n     */\n    function liquidationExcess() external view returns (uint256);\n\n    /**\n        @dev   Draws down funding from FundingLocker, posts collateral, and transitions the Loan state from `Ready` to `Active`. \n        @dev   Only the Borrower can call this function. \n        @dev   It emits four `BalanceUpdated` events. \n        @dev   It emits a `LoanStateChanged` event. \n        @dev   It emits a `Drawdown` event. \n        @param amt the amount of Liquidity Asset the Borrower draws down. Remainder is returned to the Loan where it can be claimed back by LoanFDT holders.\n     */\n    function drawdown(uint256 amt) external;\n\n    /**\n        @dev Makes a payment for this Loan. \n        @dev Amounts are calculated for the Borrower. \n     */\n    function makePayment() external;\n\n    /**\n        @dev Makes the full payment for this Loan (a.k.a. \"calling\" the Loan). \n        @dev This requires the Borrower to pay a premium fee. \n     */\n    function makeFullPayment() external;\n    \n    /**\n        @dev   Funds this Loan and mints LoanFDTs for `mintTo` (DebtLocker in the case of Pool funding). \n        @dev   Only LiquidityLocker using valid/approved Pool can call this function. \n        @dev   It emits a `LoanFunded` event. \n        @dev   It emits a `BalanceUpdated` event. \n        @param mintTo The address that LoanFDTs are minted to.\n        @param amt    The amount to fund the Loan.\n     */\n    function fundLoan(address mintTo, uint256 amt) external;\n\n    /**\n        @dev Handles returning capital to the Loan, where it can be claimed back by LoanFDT holders, \n             if the Borrower has not drawn down on the Loan past the drawdown grace period. \n        @dev It emits a `LoanStateChanged` event. \n     */\n    function unwind() external;\n\n    /**\n        @dev Triggers a default if the Loan meets certain default conditions, liquidating all collateral and updating accounting. \n        @dev Only the an account with sufficient LoanFDTs of this Loan can call this function. \n        @dev It emits a `BalanceUpdated` event. \n        @dev It emits a `Liquidation` event. \n        @dev It emits a `LoanStateChanged` event. \n     */\n    function triggerDefault() external;\n\n    /**\n        @dev Triggers paused state. \n        @dev Halts functionality for certain functions. Only the Borrower or a Loan 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 Borrower or a Loan Admin can call this function. \n     */\n    function unpause() external;\n\n    /**\n        @dev   Sets a Loan Admin. \n        @dev   Only the Borrower can call this function. \n        @dev   It emits a `LoanAdminSet` event. \n        @param loanAdmin The address being allowed or disallowed as a Loan Admin.\n        @param allowed   The atatus of a Loan Admin.\n     */\n    function setLoanAdmin(address loanAdmin, bool allowed) external;\n\n    /**\n        @dev   Transfers any locked funds to the Governor. \n        @dev   Only the Governor can call this function. \n        @param token The address of the token to be reclaimed.\n     */\n    function reclaimERC20(address token) external;\n\n    /**\n        @dev Withdraws all available funds earned through LoanFDT for a token holder. \n        @dev It emits a `BalanceUpdated` event. \n     */\n    function withdrawFunds() external override;\n\n    /**\n        @dev    Returns the expected amount of Liquidity Asset to be recovered from a liquidation based on current oracle prices.\n        @return The minimum amount of Liquidity Asset that can be expected by swapping Collateral Asset.\n     */\n    function getExpectedAmountRecovered() external view returns (uint256);\n\n    /**\n        @dev    Returns information of the next payment amount.\n        @return The entitled interest of the next payment (Principal + Interest only when the next payment is last payment of the Loan).\n        @return The entitled principal amount needed to be paid in the next payment.\n        @return The entitled interest amount needed to be paid in the next payment.\n        @return The payment due date.\n        @return Whether the payment is late.\n     */\n    function getNextPayment() external view returns (uint256, uint256, uint256, uint256, bool);\n\n    /**\n        @dev    Returns the information of a full payment amount.\n        @return total     Principal and interest owed, combined.\n        @return principal Principal owed.\n        @return interest  Interest owed.\n     */\n    function getFullPayment() external view returns (uint256 total, uint256 principal, uint256 interest);\n\n    /**\n        @dev    Calculates the collateral required to draw down amount.\n        @param  amt The amount of the Liquidity Asset to draw down from the FundingLocker.\n        @return The amount of the Collateral Asset required to post in the CollateralLocker for a given drawdown amount.\n     */\n    function collateralRequiredForDrawdown(uint256 amt) external view returns (uint256);\n\n}\n\n////// contracts/core/debt-locker/v1/interfaces/IDebtLocker.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { ILoan } from \"../../../loan/v1/interfaces/ILoan.sol\"; */\n\n/// @title DebtLocker holds custody of LoanFDT tokens.\ninterface IDebtLocker {\n\n    /**\n        @dev The Loan contract this locker is holding tokens for.\n     */\n    function loan() external view returns (ILoan);\n\n    /**\n        @dev The Liquidity Asset this locker can claim.\n     */\n    function liquidityAsset() external view returns (IERC20);\n\n    /**\n        @dev The owner of this Locker (the Pool).\n     */\n    function pool() external view returns (address);\n\n    /**\n        @dev The Loan total principal paid at last time `claim()` was called.\n     */\n    function lastPrincipalPaid() external view returns (uint256);\n\n    /**\n        @dev The Loan total interest paid at last time `claim()` was called.\n     */\n    function lastInterestPaid() external view returns (uint256);\n\n    /**\n        @dev The Loan total fees paid at last time `claim()` was called.\n     */\n    function lastFeePaid() external view returns (uint256);\n\n    /**\n        @dev The Loan total excess returned at last time `claim()` was called.\n     */\n    function lastExcessReturned() external view returns (uint256);\n\n    /**\n        @dev The Loan total default suffered at last time `claim()` was called.\n     */\n    function lastDefaultSuffered() external view returns (uint256);\n\n    /**\n        @dev Then Liquidity Asset (a.k.a. loan asset) recovered from liquidation of Loan collateral.\n     */\n    function lastAmountRecovered() external view returns (uint256);\n\n    /**\n        @dev    Claims funds distribution for Loan via LoanFDT. \n        @dev    Only the Pool can call this function. \n        @return [0] => Total Claimed.\n                [1] => Interest Claimed.\n                [2] => Principal Claimed.\n                [3] => Pool Delegate Fee Claimed.\n                [4] => Excess Returned Claimed.\n                [5] => Amount Recovered (from Liquidation).\n                [6] => Default Suffered.\n     */\n    function claim() external returns (uint256[7] memory);\n\n    /**\n        @dev Liquidates a Loan that is held by this contract. \n        @dev Only the Pool can call this function. \n     */\n    function triggerDefault() external;\n\n}\n\n////// contracts/core/subfactory/v1/interfaces/ISubFactory.sol\n/* pragma solidity 0.6.11; */\n\n/// @title SubFactory creates instances downstream of another factory.\ninterface ISubFactory {\n\n    /**\n        @dev The type of the factory\n     */\n    function factoryType() external pure returns (uint8);\n\n}\n\n////// contracts/core/debt-locker/v1/interfaces/IDebtLockerFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ISubFactory } from \"../../../subfactory/v1/interfaces/ISubFactory.sol\"; */\n\n/// @title DebtLockerFactory instantiates DebtLockers.\ninterface IDebtLockerFactory is ISubFactory {\n\n    /**\n        @dev   Emits an event indicating a DebtLocker was created.\n        @param owner      The owner of the DebtLocker.\n        @param debtLocker The address of the DebtLocker.\n        @param loan       The Loan tied to the DebtLocker.\n     */\n    event DebtLockerCreated(address indexed owner, address debtLocker, address loan);\n\n    /**\n        @param  debtLocker The address of a DebtLocker.\n        @return The address of the owner of DebtLocker at `debtLocker`.\n     */\n    function owner(address debtLocker) external view returns (address);\n\n    /**\n        @param  debtLocker Some address.\n        @return Whether `debtLocker` is a DebtLocker.\n     */\n    function isLocker(address debtLocker) external view returns (bool);\n\n    /**\n        @dev The type of the factory (i.e FactoryType::DEBT_LOCKER_FACTORY).\n     */\n    function factoryType() external override pure returns (uint8);\n\n    /**\n        @dev    Instantiates a DebtLocker. \n        @dev    It emits a `DebtLockerCreated` event. \n        @param  loan       The Loan this DebtLocker will be tied to.\n        @return debtLocker The address of the instantiated DebtLocker.\n     */\n    function newLocker(address loan) external returns (address debtLocker);\n\n}\n\n////// contracts/libraries/math/v1/SafeMathInt.sol\n/* pragma solidity 0.6.11; */\n\nlibrary SafeMathInt {\n\n    function toUint256Safe(int256 a) internal pure returns (uint256) {\n        require(a >= 0, \"SMI:NEG\");\n        return uint256(a);\n    }\n\n}\n\n////// contracts/libraries/math/v1/SafeMathUint.sol\n/* pragma solidity 0.6.11; */\n\nlibrary SafeMathUint {\n\n    function toInt256Safe(uint256 a) internal pure returns (int256 b) {\n        b = int256(a);\n        require(b >= 0, \"SMU:OOB\");\n    }\n\n}\n\n////// lib/openzeppelin-contracts/contracts/math/SafeMath.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n    /**\n     * @dev Returns the addition of two unsigned integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `+` operator.\n     *\n     * Requirements:\n     *\n     * - Addition cannot overflow.\n     */\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\n        uint256 c = a + b;\n        require(c >= a, \"SafeMath: addition overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting on\n     * overflow (when the result is negative).\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     *\n     * - Subtraction cannot overflow.\n     */\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n        return sub(a, b, \"SafeMath: subtraction overflow\");\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n     * overflow (when the result is negative).\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     *\n     * - Subtraction cannot overflow.\n     */\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b <= a, errorMessage);\n        uint256 c = a - b;\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the multiplication of two unsigned integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `*` operator.\n     *\n     * Requirements:\n     *\n     * - Multiplication cannot overflow.\n     */\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n        // benefit is lost if 'b' is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        uint256 c = a * b;\n        require(c / a == b, \"SafeMath: multiplication overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers. Reverts on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\n        return div(a, b, \"SafeMath: division by zero\");\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b > 0, errorMessage);\n        uint256 c = a / b;\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * Reverts when dividing by zero.\n     *\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\n     * invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n        return mod(a, b, \"SafeMath: modulo by zero\");\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * Reverts with custom message when dividing by zero.\n     *\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\n     * invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b != 0, errorMessage);\n        return a % b;\n    }\n}\n\n////// lib/openzeppelin-contracts/contracts/math/SignedSafeMath.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/**\n * @title SignedSafeMath\n * @dev Signed math operations with safety checks that revert on error.\n */\nlibrary SignedSafeMath {\n    int256 constant private _INT256_MIN = -2**255;\n\n    /**\n     * @dev Returns the multiplication of two signed integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `*` operator.\n     *\n     * Requirements:\n     *\n     * - Multiplication cannot overflow.\n     */\n    function mul(int256 a, int256 b) internal pure returns (int256) {\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n        // benefit is lost if 'b' is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        require(!(a == -1 && b == _INT256_MIN), \"SignedSafeMath: multiplication overflow\");\n\n        int256 c = a * b;\n        require(c / a == b, \"SignedSafeMath: multiplication overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the integer division of two signed integers. Reverts on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function div(int256 a, int256 b) internal pure returns (int256) {\n        require(b != 0, \"SignedSafeMath: division by zero\");\n        require(!(b == -1 && a == _INT256_MIN), \"SignedSafeMath: division overflow\");\n\n        int256 c = a / b;\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the subtraction of two signed integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     *\n     * - Subtraction cannot overflow.\n     */\n    function sub(int256 a, int256 b) internal pure returns (int256) {\n        int256 c = a - b;\n        require((b >= 0 && c <= a) || (b < 0 && c > a), \"SignedSafeMath: subtraction overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the addition of two signed integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `+` operator.\n     *\n     * Requirements:\n     *\n     * - Addition cannot overflow.\n     */\n    function add(int256 a, int256 b) internal pure returns (int256) {\n        int256 c = a + b;\n        require((b >= 0 && c >= a) || (b < 0 && c < a), \"SignedSafeMath: addition overflow\");\n\n        return c;\n    }\n}\n\n////// lib/openzeppelin-contracts/contracts/GSN/Context.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address payable) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes memory) {\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n        return msg.data;\n    }\n}\n\n////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/* import \"../../GSN/Context.sol\"; */\n/* import \"./IERC20.sol\"; */\n/* import \"../../math/SafeMath.sol\"; */\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20 {\n    using SafeMath for uint256;\n\n    mapping (address => uint256) private _balances;\n\n    mapping (address => mapping (address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n    uint8 private _decimals;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n     * a default value of 18.\n     *\n     * To select a different value for {decimals}, use {_setupDecimals}.\n     *\n     * All three of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor (string memory name_, string memory symbol_) public {\n        _name = name_;\n        _symbol = symbol_;\n        _decimals = 18;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n     * called.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view returns (uint8) {\n        return _decimals;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `recipient` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(_msgSender(), recipient, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        _approve(_msgSender(), spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * Requirements:\n     *\n     * - `sender` and `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``sender``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(sender, recipient, amount);\n        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n        return true;\n    }\n\n    /**\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\n     *\n     * This is internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `sender` cannot be the zero address.\n     * - `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     */\n    function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n        require(sender != address(0), \"ERC20: transfer from the zero address\");\n        require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(sender, recipient, amount);\n\n        _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n        _balances[recipient] = _balances[recipient].add(amount);\n        emit Transfer(sender, recipient, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply = _totalSupply.add(amount);\n        _balances[account] = _balances[account].add(amount);\n        emit Transfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n        _totalSupply = _totalSupply.sub(amount);\n        emit Transfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Sets {decimals} to a value other than the default one of 18.\n     *\n     * WARNING: This function should only be called from the constructor. Most\n     * applications that interact with token contracts will not expect\n     * {decimals} to ever change, and may work incorrectly if it does.\n     */\n    function _setupDecimals(uint8 decimals_) internal {\n        _decimals = decimals_;\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be to transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n}\n\n////// contracts/core/funds-distribution-token/v1/BasicFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { SafeMath }       from \"../../../../lib/openzeppelin-contracts/contracts/math/SafeMath.sol\"; */\n/* import { SignedSafeMath } from \"../../../../lib/openzeppelin-contracts/contracts/math/SignedSafeMath.sol\"; */\n/* import { ERC20 }          from \"../../../../lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\"; */\n\n/* import { SafeMathInt }  from \"../../../libraries/math/v1/SafeMathInt.sol\"; */\n/* import { SafeMathUint } from \"../../../libraries/math/v1/SafeMathUint.sol\"; */\n\n/* import { IBasicFDT } from \"./interfaces/IBasicFDT.sol\"; */\n\n/// @title BasicFDT implements the basic level FDT functionality for accounting for revenues.\nabstract contract BasicFDT is IBasicFDT, ERC20 {\n\n    using SafeMath       for uint256;\n    using SafeMathUint   for uint256;\n    using SignedSafeMath for  int256;\n    using SafeMathInt    for  int256;\n\n    uint256 internal constant pointsMultiplier = 2 ** 128;\n    uint256 internal pointsPerShare;\n\n    mapping(address => int256)  internal pointsCorrection;\n    mapping(address => uint256) internal withdrawnFunds;\n\n    constructor(string memory name, string memory symbol) ERC20(name, symbol) public { }\n\n    /**\n        @dev Distributes funds to token holders.\n        @dev It reverts if the total supply of tokens is 0.\n        @dev It emits a `FundsDistributed` event if the amount of received funds is greater than 0.\n        @dev It emits a `PointsPerShareUpdated` event if the amount of received funds is greater than 0.\n             About undistributed funds:\n                In each distribution, there is a small amount of funds which do not get distributed,\n                   which is `(value  pointsMultiplier) % totalSupply()`.\n                With a well-chosen `pointsMultiplier`, the amount funds that are not getting distributed\n                   in a distribution can be less than 1 (base unit).\n                We can actually keep track of the undistributed funds in a distribution\n                   and try to distribute it in the next distribution.\n     */\n    function _distributeFunds(uint256 value) internal {\n        require(totalSupply() > 0, \"FDT:ZERO_SUPPLY\");\n\n        if (value == 0) return;\n\n        pointsPerShare = pointsPerShare.add(value.mul(pointsMultiplier) / totalSupply());\n        emit FundsDistributed(msg.sender, value);\n        emit PointsPerShareUpdated(pointsPerShare);\n    }\n\n    /**\n        @dev    Prepares the withdrawal of funds.\n        @dev    It emits a `FundsWithdrawn` event if the amount of withdrawn funds is greater than 0.\n        @return withdrawableDividend The amount of dividend funds that can be withdrawn.\n     */\n    function _prepareWithdraw() internal returns (uint256 withdrawableDividend) {\n        withdrawableDividend       = withdrawableFundsOf(msg.sender);\n        uint256 _withdrawnFunds    = withdrawnFunds[msg.sender].add(withdrawableDividend);\n        withdrawnFunds[msg.sender] = _withdrawnFunds;\n\n        emit FundsWithdrawn(msg.sender, withdrawableDividend, _withdrawnFunds);\n    }\n\n    function withdrawableFundsOf(address _owner) public view override returns (uint256) {\n        return accumulativeFundsOf(_owner).sub(withdrawnFunds[_owner]);\n    }\n\n    function withdrawnFundsOf(address _owner) external override view returns (uint256) {\n        return withdrawnFunds[_owner];\n    }\n\n    function accumulativeFundsOf(address _owner) public override view returns (uint256) {\n        return\n            pointsPerShare\n                .mul(balanceOf(_owner))\n                .toInt256Safe()\n                .add(pointsCorrection[_owner])\n                .toUint256Safe() / pointsMultiplier;\n    }\n\n    /**\n        @dev   Transfers tokens from one account to another. Updates pointsCorrection to keep funds unchanged.\n        @dev   It emits two `PointsCorrectionUpdated` events, one for the sender and one for the receiver.\n        @param from  The address to transfer from.\n        @param to    The address to transfer to.\n        @param value The amount to be transferred.\n     */\n    function _transfer(\n        address from,\n        address to,\n        uint256 value\n    ) internal virtual override {\n        super._transfer(from, to, value);\n\n        int256 _magCorrection       = pointsPerShare.mul(value).toInt256Safe();\n        int256 pointsCorrectionFrom = pointsCorrection[from].add(_magCorrection);\n        pointsCorrection[from]      = pointsCorrectionFrom;\n        int256 pointsCorrectionTo   = pointsCorrection[to].sub(_magCorrection);\n        pointsCorrection[to]        = pointsCorrectionTo;\n\n        emit PointsCorrectionUpdated(from, pointsCorrectionFrom);\n        emit PointsCorrectionUpdated(to,   pointsCorrectionTo);\n    }\n\n    /**\n        @dev   Mints tokens to an account. Updates pointsCorrection to keep funds unchanged.\n        @param account The account that will receive the created tokens.\n        @param value   The amount that will be created.\n     */\n    function _mint(address account, uint256 value) internal virtual override {\n        super._mint(account, value);\n\n        int256 _pointsCorrection = pointsCorrection[account].sub(\n            (pointsPerShare.mul(value)).toInt256Safe()\n        );\n\n        pointsCorrection[account] = _pointsCorrection;\n\n        emit PointsCorrectionUpdated(account, _pointsCorrection);\n    }\n\n    /**\n        @dev   Burns an amount of the token of a given account. Updates pointsCorrection to keep funds unchanged.\n        @dev   It emits a `PointsCorrectionUpdated` event.\n        @param account The account whose tokens will be burnt.\n        @param value   The amount that will be burnt.\n     */\n    function _burn(address account, uint256 value) internal virtual override {\n        super._burn(account, value);\n\n        int256 _pointsCorrection = pointsCorrection[account].add(\n            (pointsPerShare.mul(value)).toInt256Safe()\n        );\n\n        pointsCorrection[account] = _pointsCorrection;\n\n        emit PointsCorrectionUpdated(account, _pointsCorrection);\n    }\n\n    function withdrawFunds() public virtual override {}\n\n    /**\n        @dev    Updates the current `fundsToken` balance and returns the difference of the new and previous `fundsToken` balance.\n        @return A int256 representing the difference of the new and previous `fundsToken` balance.\n     */\n    function _updateFundsTokenBalance() internal virtual returns (int256) {}\n\n    function updateFundsReceived() public override virtual {\n        int256 newFunds = _updateFundsTokenBalance();\n\n        if (newFunds <= 0) return;\n\n        _distributeFunds(newFunds.toUint256Safe());\n    }\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/funds-distribution-token/v1/ExtendedFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IExtendedFDT } from \"./interfaces/IExtendedFDT.sol\"; */\n\n/* import { BasicFDT, SafeMath, SafeMathInt, SafeMathUint, SignedSafeMath } from \"./BasicFDT.sol\"; */\n\n/// @title ExtendedFDT implements the FDT functionality for accounting for losses.\nabstract contract ExtendedFDT is IExtendedFDT, BasicFDT {\n\n    using SafeMath       for uint256;\n    using SafeMathUint   for uint256;\n    using SignedSafeMath for  int256;\n    using SafeMathInt    for  int256;\n\n    uint256 internal lossesPerShare;\n\n    mapping(address => int256)  internal lossesCorrection;\n    mapping(address => uint256) internal recognizedLosses;\n\n    constructor(string memory name, string memory symbol) BasicFDT(name, symbol) public { }\n\n    /**\n        @dev Distributes losses to token holders.\n        @dev It reverts if the total supply of tokens is 0.\n        @dev It emits a `LossesDistributed` event if the amount of received losses is greater than 0.\n        @dev It emits a `LossesPerShareUpdated` event if the amount of received losses is greater than 0.\n             About undistributed losses:\n                In each distribution, there is a small amount of losses which do not get distributed,\n                which is `(value * pointsMultiplier) % totalSupply()`.\n             With a well-chosen `pointsMultiplier`, the amount losses that are not getting distributed\n                in a distribution can be less than 1 (base unit).\n             We can actually keep track of the undistributed losses in a distribution\n                and try to distribute it in the next distribution.\n     */\n    function _distributeLosses(uint256 value) internal {\n        require(totalSupply() > 0, \"FDT:ZERO_SUPPLY\");\n\n        if (value == 0) return;\n\n        uint256 _lossesPerShare = lossesPerShare.add(value.mul(pointsMultiplier) / totalSupply());\n        lossesPerShare          = _lossesPerShare;\n\n        emit LossesDistributed(msg.sender, value);\n        emit LossesPerShareUpdated(_lossesPerShare);\n    }\n\n    /**\n        @dev    Prepares losses for a withdrawal.\n        @dev    It emits a `LossesWithdrawn` event if the amount of withdrawn losses is greater than 0.\n        @return recognizableDividend The amount of dividend losses that can be recognized.\n     */\n    function _prepareLossesWithdraw() internal returns (uint256 recognizableDividend) {\n        recognizableDividend = recognizableLossesOf(msg.sender);\n\n        uint256 _recognizedLosses    = recognizedLosses[msg.sender].add(recognizableDividend);\n        recognizedLosses[msg.sender] = _recognizedLosses;\n\n        emit LossesRecognized(msg.sender, recognizableDividend, _recognizedLosses);\n    }\n\n    function recognizableLossesOf(address _owner) public override view returns (uint256) {\n        return accumulativeLossesOf(_owner).sub(recognizedLosses[_owner]);\n    }\n\n    function recognizedLossesOf(address _owner) external override view returns (uint256) {\n        return recognizedLosses[_owner];\n    }\n\n    function accumulativeLossesOf(address _owner) public override view returns (uint256) {\n        return\n            lossesPerShare\n                .mul(balanceOf(_owner))\n                .toInt256Safe()\n                .add(lossesCorrection[_owner])\n                .toUint256Safe() / pointsMultiplier;\n    }\n\n    /**\n        @dev   Transfers tokens from one account to another. Updates pointsCorrection to keep funds unchanged.\n        @dev         It emits two `LossesCorrectionUpdated` events, one for the sender and one for the receiver.\n        @param from  The address to transfer from.\n        @param to    The address to transfer to.\n        @param value The amount to be transferred.\n     */\n    function _transfer(\n        address from,\n        address to,\n        uint256 value\n    ) internal virtual override {\n        super._transfer(from, to, value);\n\n        int256 _lossesCorrection    = lossesPerShare.mul(value).toInt256Safe();\n        int256 lossesCorrectionFrom = lossesCorrection[from].add(_lossesCorrection);\n        lossesCorrection[from]      = lossesCorrectionFrom;\n        int256 lossesCorrectionTo   = lossesCorrection[to].sub(_lossesCorrection);\n        lossesCorrection[to]        = lossesCorrectionTo;\n\n        emit LossesCorrectionUpdated(from, lossesCorrectionFrom);\n        emit LossesCorrectionUpdated(to,   lossesCorrectionTo);\n    }\n\n    /**\n        @dev   Mints tokens to an account. Updates lossesCorrection to keep losses unchanged.\n        @dev   It emits a `LossesCorrectionUpdated` event.\n        @param account The account that will receive the created tokens.\n        @param value   The amount that will be created.\n     */\n    function _mint(address account, uint256 value) internal virtual override {\n        super._mint(account, value);\n\n        int256 _lossesCorrection = lossesCorrection[account].sub(\n            (lossesPerShare.mul(value)).toInt256Safe()\n        );\n\n        lossesCorrection[account] = _lossesCorrection;\n\n        emit LossesCorrectionUpdated(account, _lossesCorrection);\n    }\n\n    /**\n        @dev   Burns an amount of the token of a given account. Updates lossesCorrection to keep losses unchanged.\n        @dev   It emits a `LossesCorrectionUpdated` event.\n        @param account The account from which tokens will be burnt.\n        @param value   The amount that will be burnt.\n     */\n    function _burn(address account, uint256 value) internal virtual override {\n        super._burn(account, value);\n\n        int256 _lossesCorrection = lossesCorrection[account].add(\n            (lossesPerShare.mul(value)).toInt256Safe()\n        );\n\n        lossesCorrection[account] = _lossesCorrection;\n\n        emit LossesCorrectionUpdated(account, _lossesCorrection);\n    }\n\n    function updateLossesReceived() public override virtual {\n        int256 newLosses = _updateLossesBalance();\n\n        if (newLosses <= 0) return;\n\n        _distributeLosses(newLosses.toUint256Safe());\n    }\n\n    /**\n        @dev Recognizes all recognizable losses for an account using loss accounting.\n     */\n    function _recognizeLosses() internal virtual returns (uint256 losses) { }\n\n    /**\n        @dev    Updates the current losses balance and returns the difference of the new and previous losses balance.\n        @return A int256 representing the difference of the new and previous losses balance.\n     */\n    function _updateLossesBalance() internal virtual returns (int256) { }\n\n}\n\n////// contracts/core/globals/v1/interfaces/IMapleGlobals.sol\n/* pragma solidity 0.6.11; */\n\n/// @title MapleGlobals maintains a central source of parameters and allowlists for the Maple protocol.\ninterface IMapleGlobals {\n\n    /**\n        @dev   Emits an event indicating the MapleGlobals contract was created.\n     */\n    event Initialized();\n\n    /**\n        @dev   Emits an event indicating the validity of a Collateral Asset was set.\n        @param asset    The Collateral Asset to assign validity to.\n        @param decimals The number of decimal places of `asset`.\n        @param symbol   The symbol of `asset`.\n        @param valid    The new validity status of `asset`.\n     */\n    event CollateralAssetSet(address asset, uint256 decimals, string symbol, bool valid);\n\n    /**\n        @dev   Emits an event indicating the validity of a Liquidity Asset was set.\n        @param asset    The Liquidity Asset to assign validity to.\n        @param decimals The number of decimal places of `asset`.\n        @param symbol   The symbol of `asset`.\n        @param valid    The new validity status of `asset`.\n     */\n    event LiquidityAssetSet(address asset, uint256 decimals, string symbol, bool valid);\n\n    /**\n        @dev   Emits an event indicating the Oracle for an asset was set.\n        @param asset  The asset to update price for.\n        @param oracle The new Oracle to use.\n     */\n    event OracleSet(address asset, address oracle);\n\n    /**\n        @dev This is unused.\n     */\n    event TransferRestrictionExemptionSet(address indexed exemptedContract, bool valid);\n\n    /**\n        @dev   Emits an event indicating the validity of a Balancer Pool was set.\n        @param balancerPool The address of Balancer Pool contract.\n        @param valid        The new validity status of a Balancer Pool.\n     */\n    event BalancerPoolSet(address balancerPool, bool valid);\n\n    /**\n        @dev   Emits an event indicating a PendingGovernor was set.\n        @param pendingGovernor The address of the new Pending Governor.\n     */\n    event PendingGovernorSet(address indexed pendingGovernor);\n\n    /**\n        @dev   Emits an event indicating Governorship was accepted by a new account.\n        @param governor The account that has accepted Governorship.\n     */\n    event GovernorAccepted(address indexed governor);\n\n    /**\n        @dev   Emits an event indicating that some Governor controlled parameter was set.\n        @param which The identifier of the parameter that was set.\n        @param value The value the parameter was set to.\n     */\n    event GlobalsParamSet(bytes32 indexed which, uint256 value);\n\n    /**\n        @dev   Emits an event indicating that some Governor controlled address was set.\n        @param which The identifier of the address that was set.\n        @param addr  The address that was set.\n     */\n    event GlobalsAddressSet(bytes32 indexed which, address addr);\n\n    /**\n        @dev   Emits an event indicating the protocol's paused state has been set.\n        @param pause Whether the protocol was paused.\n     */\n    event ProtocolPaused(bool pause);\n\n    /**\n        @dev   Emits an event indicating the GlobalAdmin was set.\n        @param newGlobalAdmin The address of the new GlobalAdmin.\n     */\n    event GlobalAdminSet(address indexed newGlobalAdmin);\n\n    /**\n        @dev   Emits an event indicating the validity of a Pool Delegate was set.\n        @param poolDelegate The address of a Pool Delegate.\n        @param valid        Whether `poolDelegate` is a valid Pool Delegate.\n     */\n    event PoolDelegateSet(address indexed poolDelegate, bool valid);\n\n    /**\n        @dev The ERC-2222 Maple Token for the Maple protocol.\n     */\n    function mpl() external pure returns (address);\n\n    /**\n        @dev The Governor that is declared for governorship transfer. \n        @dev Must be accepted for transfer to take effect. \n     */\n    function pendingGovernor() external view returns (address);\n\n    /**\n        @dev The Governor responsible for management of global Maple variables.\n     */\n    function governor() external view returns (address);\n\n    /**\n        @dev The MapleTreasury is the Treasury where all fees pass through for conversion, prior to distribution.\n     */\n    function mapleTreasury() external view returns (address);\n\n    /**\n        @dev The Global Admin of the whole network. \n        @dev Has the power to switch off/on the functionality of entire protocol. \n     */\n    function globalAdmin() external view returns (address);\n\n    /**\n        @dev The amount of time a Borrower has to make a missed payment before a default can be triggered. \n     */\n    function defaultGracePeriod() external view returns (uint256);\n\n    /**\n        @dev The minimum amount of Pool cover that a Pool Delegate has to provide before they can finalize a Pool.\n     */\n    function swapOutRequired() external view returns (uint256);\n\n    /**\n        @dev The amount of time to allow a Borrower to drawdown on their Loan after funding period ends.\n     */\n    function fundingPeriod() external view returns (uint256);\n\n    /**\n        @dev The portion of drawdown that goes to the Pool Delegates and individual Lenders.\n     */\n    function investorFee() external view returns (uint256);\n\n    /**\n        @dev The portion of drawdown that goes to the MapleTreasury.\n     */\n    function treasuryFee() external view returns (uint256);\n\n    /**\n        @dev The maximum amount of slippage for Uniswap transactions.\n     */\n    function maxSwapSlippage() external view returns (uint256);\n\n    /**\n        @dev The minimum amount of LoanFDTs required to trigger liquidations (basis points percentage of totalSupply).\n     */\n    function minLoanEquity() external view returns (uint256);\n\n    /**\n        @dev The period (in secs) after which Stakers are allowed to unstake their BPTs from a StakeLocker.\n     */\n    function stakerCooldownPeriod() external view returns (uint256);\n\n    /**\n        @dev The period (in secs) after which LPs are allowed to withdraw their funds from a Pool.\n     */\n    function lpCooldownPeriod() external view returns (uint256);\n\n    /**\n        @dev The window of time (in secs) after `stakerCooldownPeriod` that an account has to withdraw before their intent to unstake is invalidated.\n     */\n    function stakerUnstakeWindow() external view returns (uint256);\n\n    /**\n        @dev The window of time (in secs) after `lpCooldownPeriod` that an account has to withdraw before their intent to withdraw is invalidated.\n     */\n    function lpWithdrawWindow() external view returns (uint256);\n\n    /**\n        @dev Whether the functionality of the entire protocol is paused.\n     */\n    function protocolPaused() external view returns (bool);\n\n    /**\n        @param  liquidityAsset The address of a Liquidity Asset.\n        @return Whether `liquidityAsset` is valid.\n     */\n    function isValidLiquidityAsset(address liquidityAsset) external view returns (bool);\n\n    /**\n        @param  collateralAsset The address of a Collateral Asset.\n        @return Whether `collateralAsset` is valid.\n     */\n    function isValidCollateralAsset(address collateralAsset) external view returns (bool);\n\n    /**\n        @param  calc The address of a Calculator.\n        @return Whether `calc` is valid.\n     */\n    function validCalcs(address calc) external view returns (bool);\n\n    /**\n        @dev    Prevents unauthorized/unknown addresses from creating Pools.\n        @param  poolDelegate The address of a Pool Delegate.\n        @return Whether `poolDelegate` is valid.\n     */\n    function isValidPoolDelegate(address poolDelegate) external view returns (bool);\n\n    /**\n        @param  balancerPool The address of a Balancer Pool.\n        @return Whether Maple has approved `balancerPool` for BPT staking.\n     */\n    function isValidBalancerPool(address balancerPool) external view returns (bool);\n\n    /**\n        @dev Determines the liquidation path of various assets in Loans and the Treasury. \n        @dev The value provided will determine whether or not to perform a bilateral or triangular swap on Uniswap. \n        @dev For example, `defaultUniswapPath[WBTC][USDC]` value would indicate what asset to convert WBTC into before conversion to USDC. \n        @dev If `defaultUniswapPath[WBTC][USDC] == USDC`, then the swap is bilateral and no middle asset is swapped. \n        @dev If `defaultUniswapPath[WBTC][USDC] == WETH`, then swap WBTC for WETH, then WETH for USDC. \n        @param  tokenA The address of the asset being swapped.\n        @param  tokenB The address of the final asset to receive.\n        @return The intermediary asset for swaps, if any.\n     */\n    function defaultUniswapPath(address tokenA, address tokenB) external view returns (address);\n\n    /**\n        @param  asset The address of some token.\n        @return The Chainlink Oracle for the price of `asset`.\n     */\n    function oracleFor(address asset) external view returns (address);\n    \n    /**\n        @param  poolFactory The address of a Pool Factory.\n        @return Whether `poolFactory` is valid.\n     */\n    function isValidPoolFactory(address poolFactory) external view returns (bool);\n\n    /**\n        @param  loanFactory The address of a Loan Factory.\n        @return Whether `loanFactory` is valid.\n     */\n    function isValidLoanFactory(address loanFactory) external view returns (bool);\n    \n    /**\n        @param  superFactory The core factory (e.g. PoolFactory, LoanFactory).\n        @param  subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n        @return Whether `subFactory` is valid as it relates to `superFactory`.\n     */\n    function validSubFactories(address superFactory, address subFactory) external view returns (bool);\n    \n    /**\n        @dev   Sets the Staker cooldown period. \n        @dev   This change will affect the existing cool down period for the Stakers that already intended to unstake. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param newCooldownPeriod The new value for the cool down period.\n     */\n    function setStakerCooldownPeriod(uint256 newCooldownPeriod) external;\n\n    /**\n        @dev   Sets the Liquidity Pool cooldown period. \n        @dev   This change will affect the existing cool down period for the LPs that already intended to withdraw. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param newCooldownPeriod The new value for the cool down period.\n     */\n    function setLpCooldownPeriod(uint256 newCooldownPeriod) external;\n\n    /**\n        @dev   Sets the Staker unstake window. \n        @dev   This change will affect the existing window for the Stakers that already intended to unstake. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param newUnstakeWindow The new value for the unstake window.\n     */\n    function setStakerUnstakeWindow(uint256 newUnstakeWindow) external;\n\n    /**\n        @dev   Sets the Liquidity Pool withdraw window. \n        @dev   This change will affect the existing window for the LPs that already intended to withdraw. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param newLpWithdrawWindow The new value for the withdraw window.\n     */\n    function setLpWithdrawWindow(uint256 newLpWithdrawWindow) external;\n\n    /**\n        @dev   Sets the allowed Uniswap slippage percentage, in basis points. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param newMaxSlippage The new max slippage percentage (in basis points)\n     */\n    function setMaxSwapSlippage(uint256 newMaxSlippage) external;\n\n    /**\n      @dev   Sets the Global Admin. \n      @dev   Only the Governor can call this function. \n      @dev   It emits a `GlobalAdminSet` event. \n      @param newGlobalAdmin The new global admin address.\n     */\n    function setGlobalAdmin(address newGlobalAdmin) external;\n\n    /**\n        @dev   Sets the validity of a Balancer Pool. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `BalancerPoolSet` event. \n        @param balancerPool The address of Balancer Pool contract.\n        @param valid        The new validity status of a Balancer Pool.\n     */\n    function setValidBalancerPool(address balancerPool, bool valid) external;\n\n    /**\n        @dev   Sets the paused/unpaused state of the protocol. \n        @dev   Only the Global Admin can call this function. \n        @dev   It emits a `ProtocolPaused` event. \n        @param pause A boolean flag to switch externally facing functionality in the protocol on/off.\n     */\n    function setProtocolPause(bool pause) external;\n\n    /**\n        @dev   Sets the validity of a PoolFactory. \n        @dev   Only the Governor can call this function. \n        @param poolFactory The address of a PoolFactory.\n        @param valid       The new validity status of `poolFactory`.\n     */\n    function setValidPoolFactory(address poolFactory, bool valid) external;\n\n    /**\n        @dev   Sets the validity of a LoanFactory. \n        @dev   Only the Governor can call this function. \n        @param loanFactory The address of a LoanFactory.\n        @param valid       The new validity status of `loanFactory`.\n     */\n    function setValidLoanFactory(address loanFactory, bool valid) external;\n\n    /**\n        @dev   Sets the validity of `subFactory` as it relates to `superFactory`. \n        @dev   Only the Governor can call this function. \n        @param superFactory The core factory (e.g. PoolFactory, LoanFactory).\n        @param subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n        @param valid        The new validity status of `subFactory` within context of `superFactory`.\n     */\n    function setValidSubFactory(address superFactory, address subFactory, bool valid) external;\n\n    /**\n        @dev   Sets the path to swap an asset through Uniswap. \n        @dev   Only the Governor can call this function. \n        @dev   Set to == mid to enable a bilateral swap (single path swap). \n        @dev   Set to != mid to enable a triangular swap (multi path swap). \n        @param from The address of the asset being swapped.\n        @param to   The address of the final asset to receive.\n        @param mid  The intermediary asset for swaps, if any.\n     */\n    function setDefaultUniswapPath(address from, address to, address mid) external;\n\n    /**\n        @dev   Sets the validity of a Pool Delegate (those allowed to create Pools). \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `PoolDelegateSet` event. \n        @param poolDelegate The address to manage permissions for.\n        @param valid        The new validity status of a Pool Delegate.\n     */\n    function setPoolDelegateAllowlist(address poolDelegate, bool valid) external;\n\n    /**\n        @dev   Sets the validity of an asset for collateral. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `CollateralAssetSet` event. \n        @param asset The asset to assign validity to.\n        @param valid The new validity status of a Collateral Asset.\n     */\n    function setCollateralAsset(address asset, bool valid) external;\n\n    /**\n        @dev   Sets the validity of an asset for liquidity in Pools. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `LiquidityAssetSet` event. \n        @param asset The asset to assign validity to.\n        @param valid The new validity status a Liquidity Asset in Pools.\n     */\n    function setLiquidityAsset(address asset, bool valid) external;\n\n    /**\n        @dev   Sets the validity of a calculator contract. \n        @dev   Only the Governor can call this function. \n        @param calc  The Calculator address.\n        @param valid The new validity status of a Calculator.\n     */\n    function setCalc(address calc, bool valid) external;\n\n    /**\n        @dev   Sets the investor fee (in basis points). \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _fee The fee, e.g., 50 = 0.50%.\n     */\n    function setInvestorFee(uint256 _fee) external;\n\n    /**\n        @dev   Sets the treasury fee (in basis points). \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _fee The fee, e.g., 50 = 0.50%.\n     */\n    function setTreasuryFee(uint256 _fee) external;\n\n    /**\n        @dev   Sets the MapleTreasury. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _mapleTreasury A new MapleTreasury address.\n     */\n    function setMapleTreasury(address _mapleTreasury) external;\n\n    /**\n        @dev   Sets the default grace period. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _defaultGracePeriod The new number of seconds to set the grace period to.\n     */\n    function setDefaultGracePeriod(uint256 _defaultGracePeriod) external;\n\n    /**\n        @dev   Sets the minimum Loan equity. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _minLoanEquity The new minimum percentage of Loan equity an account must have to trigger liquidations.\n     */\n    function setMinLoanEquity(uint256 _minLoanEquity) external;\n\n    /**\n        @dev   Sets the funding period. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _fundingPeriod The number of seconds to set the drawdown grace period to.\n     */\n    function setFundingPeriod(uint256 _fundingPeriod) external;\n\n    /**\n        @dev   Sets the the minimum Pool cover required to finalize a Pool. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param amt The new minimum swap out required.\n     */\n    function setSwapOutRequired(uint256 amt) external;\n\n    /**\n        @dev   Sets a price feed's oracle. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `OracleSet` event. \n        @param asset  The asset to update price for.\n        @param oracle The new Oracle to use for the price of `asset`.\n     */\n    function setPriceOracle(address asset, address oracle) external;\n\n    /**\n        @dev   Sets a new Pending Governor. \n        @dev   This address can become Governor if they accept. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `PendingGovernorSet` event. \n        @param _pendingGovernor The address of a new Pending Governor.\n     */\n    function setPendingGovernor(address _pendingGovernor) external;\n\n    /**\n        @dev Accept the Governor position. \n        @dev Only the Pending Governor can call this function. \n        @dev It emits a `GovernorAccepted` event. \n     */\n    function acceptGovernor() external;\n\n    /**\n        @dev    Fetch price for asset from Chainlink oracles.\n        @param  asset The asset to fetch the price of.\n        @return The price of asset in USD.\n     */\n    function getLatestPrice(address asset) external view returns (uint256);\n\n    /**\n        @dev   Checks that a `subFactory` is valid as it relates to `superFactory`.\n        @param superFactory The core factory (e.g. PoolFactory, LoanFactory).\n        @param subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n        @param factoryType  The type expected for the subFactory. \n                                0 = COLLATERAL_LOCKER_FACTORY, \n                                1 = DEBT_LOCKER_FACTORY, \n                                2 = FUNDING_LOCKER_FACTORY, \n                                3 = LIQUIDITY_LOCKER_FACTORY, \n                                4 = STAKE_LOCKER_FACTORY. \n     */\n    function isValidSubFactory(address superFactory, address subFactory, uint8 factoryType) external view returns (bool);\n\n    /**\n        @dev   Checks that a Calculator is valid.\n        @param calc     The Calculator address.\n        @param calcType The Calculator type.\n     */\n    function isValidCalc(address calc, uint8 calcType) external view returns (bool);\n\n    /**\n        @dev    Returns the `lpCooldownPeriod` and `lpWithdrawWindow` as a tuple, for convenience.\n        @return The value of `lpCooldownPeriod`.\n        @return The value of `lpWithdrawWindow`.\n     */\n    function getLpCooldownParams() external view returns (uint256, uint256);\n\n}\n\n////// contracts/core/liquidity-locker/v1/interfaces/ILiquidityLocker.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/// @title LiquidityLocker holds custody of Liquidity Asset tokens for a given Pool.\ninterface ILiquidityLocker {\n\n    /**\n        @dev The Pool contract address that owns this LiquidityLocker.\n     */\n    function pool() external view returns (address);\n\n    /**\n        @dev The Liquidity Asset which this LiquidityLocker will escrow.\n     */\n    function liquidityAsset() external view returns (IERC20);\n\n    /**\n        @dev   Transfers amount of Liquidity Asset to a destination account. \n        @dev   Only the Pool can call this function. \n        @param dst The destination to transfer Liquidity Asset to.\n        @param amt The amount of Liquidity Asset to transfer.\n     */\n    function transfer(address dst, uint256 amt) external;\n\n    /**\n        @dev   Funds a Loan using available assets in this LiquidityLocker. \n        @dev   Only the Pool can call this function. \n        @param loan       The Loan to fund.\n        @param debtLocker The DebtLocker that will escrow debt tokens.\n        @param amount     The amount of Liquidity Asset to fund the Loan for.\n     */\n    function fundLoan(address loan, address debtLocker, uint256 amount) external;\n\n}\n\n////// contracts/core/liquidity-locker/v1/interfaces/ILiquidityLockerFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ISubFactory } from  \"../../../subfactory/v1/interfaces/ISubFactory.sol\"; */\n\n/// @title LiquidityLockerFactory instantiates LiquidityLockers.\ninterface ILiquidityLockerFactory is ISubFactory {\n\n    /**\n        @dev   Emits an event indicating a LiquidityLocker was created.\n        @param owner           The owner of the LiquidityLocker.\n        @param liquidityLocker The address of the LiquidityLocker.\n        @param liquidityAsset  The Liquidity Asset of the LiquidityLocker.\n     */\n    event LiquidityLockerCreated(address indexed owner, address liquidityLocker, address liquidityAsset);\n\n    /**\n        @param  liquidityLocker The address of a LiquidityLocker.\n        @return The address of the owner of LiquidityLocker at `liquidityLocker`.\n     */\n    function owner(address liquidityLocker) external view returns (address);\n\n    /**\n        @param  liquidityLocker The address of a LiquidityLocker.\n        @return The address of the owner of LiquidityLocker at `liquidityLocker`.\n     */\n    function isLocker(address liquidityLocker) external view returns (bool);\n\n    /**\n        @dev The type of the factory (i.e FactoryType::LIQUIDITY_LOCKER_FACTORY).\n     */\n    function factoryType() external override pure returns (uint8);\n\n    /**\n        @dev    Instantiates a LiquidityLocker contract.\n        @dev    It emits a `LiquidityLockerCreated` event.\n        @param  liquidityAsset  The Liquidity Asset this LiquidityLocker will escrow.\n        @return liquidityLocker The address of the instantiated LiquidityLocker.\n     */\n    function newLocker(address liquidityAsset) external returns (address liquidityLocker);\n\n}\n\n////// contracts/core/loan/v1/interfaces/ILoanFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IMapleGlobals } from \"../../../globals/v1/interfaces/IMapleGlobals.sol\"; */\n\n/// @title LoanFactory instantiates Loans.\ninterface ILoanFactory {\n\n    /**\n        @dev   Emits an event indicating a LoanFactoryAdmin was allowed.\n        @param loanFactoryAdmin The address of a LoanFactoryAdmin.\n        @param allowed          Whether `loanFactoryAdmin` is allowed as an admin of the LoanFactory.\n     */\n    event LoanFactoryAdminSet(address indexed loanFactoryAdmin, bool allowed);\n\n    /**\n        @dev   Emits an event indicating a Loan was created.\n        @param loan             The address of the Loan.\n        @param borrower         The Borrower.\n        @param liquidityAsset   The asset the Loan will raise funding in.\n        @param collateralAsset  The asset the Loan will use as collateral.\n        @param collateralLocker The address of the Collateral Locker.\n        @param fundingLocker    The address of the Funding Locker.\n        @param specs            The specifications for the Loan. \n                                    [0] => apr, \n                                    [1] => termDays, \n                                    [2] => paymentIntervalDays, \n                                    [3] => requestAmount, \n                                    [4] => collateralRatio. \n        @param calcs            The calculators used for the Loan. \n                                    [0] => repaymentCalc, \n                                    [1] => lateFeeCalc, \n                                    [2] => premiumCalc. \n        @param name             The name of the Loan FDTs.\n        @param symbol           The symbol of the Loan FDTs.\n     */\n    event LoanCreated(\n        address loan,\n        address indexed borrower,\n        address indexed liquidityAsset,\n        address collateralAsset,\n        address collateralLocker,\n        address fundingLocker,\n        uint256[5] specs,\n        address[3] calcs,\n        string name,\n        string symbol\n    );\n\n    /**\n        @dev The Factory type of `CollateralLockerFactory`.\n     */\n    function CL_FACTORY() external view returns (uint8);\n\n    /**\n        @dev The Factory type of `FundingLockerFactory`.\n     */\n    function FL_FACTORY() external view returns (uint8);\n\n    /**\n        @dev The Calc type of `RepaymentCalc`.\n     */\n    function INTEREST_CALC_TYPE() external view returns (uint8);\n\n    /**\n        @dev The Calc type of `LateFeeCalc`.\n     */\n    function LATEFEE_CALC_TYPE() external view returns (uint8);\n\n    /**\n        @dev The Calc type of `PremiumCalc`.\n     */\n    function PREMIUM_CALC_TYPE() external view returns (uint8);\n\n    /**\n        @dev The instance of the MapleGlobals.\n     */\n    function globals() external view returns (IMapleGlobals);\n\n    /**\n        @dev The incrementor for number of Loans created.\n     */\n    function loansCreated() external view returns (uint256);\n\n    /**\n        @param  index The index of a Loan.\n        @return The address of the Loan at `index`.\n     */\n    function loans(uint256 index) external view returns (address);\n\n    /**\n        @param  loan The address of a Loan.\n        @return Whether `loan` is a Loan.\n     */\n    function isLoan(address loan) external view returns (bool);\n\n    /**\n        @param  admin The address of a LoanFactoryAdmin.\n        @return Whether `admin` has permission to do certain operations in case of disaster management.\n     */\n    function loanFactoryAdmins(address admin) external view returns (bool);\n\n    /**\n        @dev   Sets MapleGlobals. \n        @dev   Only the Governor can call this function. \n        @param newGlobals Address of new MapleGlobals.\n     */\n    function setGlobals(address newGlobals) external;\n\n    /**\n        @dev    Create a new Loan. \n        @dev    It emits a `LoanCreated` event. \n        @param  liquidityAsset  The asset the Loan will raise funding in.\n        @param  collateralAsset The asset the Loan will use as collateral.\n        @param  flFactory       The factory to instantiate a FundingLocker from.\n        @param  clFactory       The factory to instantiate a CollateralLocker from.\n        @param  specs           The specifications for the Loan. \n                                    [0] => apr, \n                                    [1] => termDays, \n                                    [2] => paymentIntervalDays, \n                                    [3] => requestAmount, \n                                    [4] => collateralRatio. \n        @param  calcs           The calculators used for the Loan. \n                                    [0] => repaymentCalc, \n                                    [1] => lateFeeCalc, \n                                    [2] => premiumCalc. \n        @return loanAddress     Address of the instantiated Loan.\n     */\n    function createLoan(\n        address liquidityAsset,\n        address collateralAsset,\n        address flFactory,\n        address clFactory,\n        uint256[5] memory specs,\n        address[3] memory calcs\n    ) external returns (address);\n\n    /**\n        @dev   Sets a LoanFactory Admin. Only the Governor can call this function.\n        @dev   It emits a `LoanFactoryAdminSet` event.\n        @param loanFactoryAdmin An address being allowed or disallowed as a LoanFactory Admin.\n        @param allowed          The status of `loanFactoryAdmin` as an Admin.\n     */\n    function setLoanFactoryAdmin(address loanFactoryAdmin, bool allowed) external;\n\n    /**\n        @dev Triggers paused state. \n        @dev Halts functionality for certain functions. \n        @dev Only the Governor or a LoanFactory 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 Governor or a LoanFactory Admin can call this function.\n     */\n    function unpause() external;\n\n}\n\n////// contracts/core/pool/v1/interfaces/IPoolFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IExtendedFDT } from \"../../../funds-distribution-token/v1/interfaces/IExtendedFDT.sol\"; */\n\n/// @title PoolFDT inherits ExtendedFDT and accounts for gains/losses for Liquidity Providers.\ninterface IPoolFDT is IExtendedFDT {\n\n    /**\n        @dev The sum of all withdrawable interest.\n     */\n    function interestSum() external view returns (uint256);\n\n    /**\n        @dev The sum of all unrecognized losses.\n     */\n    function poolLosses() external view returns (uint256);\n\n    /**\n        @dev The amount of earned interest present and accounted for in this contract.\n     */\n    function interestBalance() 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\n////// contracts/core/pool/v1/PoolFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ExtendedFDT, SafeMath } from \"../../funds-distribution-token/v1/ExtendedFDT.sol\"; */\n\n/* import { IPoolFDT } from \"./interfaces/IPoolFDT.sol\"; */\n\n/// @title PoolFDT inherits ExtendedFDT and accounts for gains/losses for Liquidity Providers.\nabstract contract PoolFDT is IPoolFDT, ExtendedFDT {\n\n    using SafeMath       for uint256;\n\n    uint256 public override interestSum;\n    uint256 public override poolLosses;\n\n    uint256 public override interestBalance;\n    uint256 public override lossesBalance;\n\n    constructor(string memory name, string memory symbol) ExtendedFDT(name, symbol) public { }\n\n    /**\n        @dev Realizes losses incurred to LPs.\n     */\n    function _recognizeLosses() internal override returns (uint256 losses) {\n        losses = _prepareLossesWithdraw();\n\n        poolLosses = poolLosses.sub(losses);\n\n        _updateLossesBalance();\n    }\n\n    /**\n        @dev    Updates the current losses balance and returns the difference of the new and previous losses balance.\n        @return A int256 representing the difference of the new and previous losses balance.\n     */\n    function _updateLossesBalance() internal override returns (int256) {\n        uint256 _prevLossesTokenBalance = lossesBalance;\n\n        lossesBalance = poolLosses;\n\n        return int256(lossesBalance).sub(int256(_prevLossesTokenBalance));\n    }\n\n    /**\n        @dev    Updates the current interest balance and returns the difference of the new and previous interest balance.\n        @return A int256 representing the difference of the new and previous interest balance.\n     */\n    function _updateFundsTokenBalance() internal override returns (int256) {\n        uint256 _prevFundsTokenBalance = interestBalance;\n\n        interestBalance = interestSum;\n\n        return int256(interestBalance).sub(int256(_prevFundsTokenBalance));\n    }\n\n}\n\n////// contracts/core/pool/v1/interfaces/IPool.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { IPoolFDT } from \"./IPoolFDT.sol\"; */\n\n/// @title Pool maintains all accounting and functionality related to Pools.\ninterface IPool is IPoolFDT {\n\n    /**\n        Initialized = The Pool has been initialized and is ready for liquidity.\n        Finalized   = The Pool has been sufficiently sourced wth liquidity.\n        Deactivated = The Pool has been emptied and deactivated.\n     */\n    enum State { Initialized, Finalized, Deactivated }\n\n    /**\n        @dev   Emits an event indicating a Loan was funded.\n        @param loan         The funded Loan.\n        @param debtLocker   The DebtLocker.\n        @param amountFunded The amount the Loan was funded for.\n     */\n    event LoanFunded(address indexed loan, address debtLocker, uint256 amountFunded);\n\n    /**\n        @dev   Emits an event indicating a Loan was claimed.\n        @param loan                The Loan.\n        @param interest            The interest.\n        @param principal           The principal.\n        @param fee                 The total fee.\n        @param stakeLockerPortion  The portion of the fee for Stakers.\n        @param poolDelegatePortion The portion of the fee for the Pool Delegate.\n     */\n    event Claim(address indexed loan, uint256 interest, uint256 principal, uint256 fee, uint256 stakeLockerPortion, uint256 poolDelegatePortion);\n\n    /**\n        @dev   Emits an event indicating some Balance was updated.\n        @param liquidityProvider The address of a Liquidity Provider.\n        @param token             The address of the token for which the balance of `liquidityProvider` changed.\n        @param balance           The new balance for `liquidityProvider`.\n     */\n    event BalanceUpdated(address indexed liquidityProvider, address indexed token, uint256 balance);\n\n    /**\n        @dev   Emits an event indicating a transfer of funds was performed by a custodian.\n        @param custodian The address of the custodian.\n        @param from      The source of funds that were custodied.\n        @param to        The destination of funds.\n        @param amount    The amount of custodied tokens transferred.\n     */\n    event CustodyTransfer(address indexed custodian, address indexed from, address indexed to, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating a change in the total amount in custodianship for an account.\n        @param liquidityProvider The address of amount who's funds are being custodied.\n        @param custodian         The address of the custodian.\n        @param oldAllowance      The original total amount in custodian by `custodian` for `liquidityProvider`.\n        @param newAllowance      The updated total amount in custodian by `custodian` for `liquidityProvider`.\n     */\n    event CustodyAllowanceChanged(address indexed liquidityProvider, address indexed custodian, uint256 oldAllowance, uint256 newAllowance);\n\n    /**\n        @dev   Emits an event indicating a that a Liquidity Provider's status has changed.\n        @param liquidityProvider The address of a Liquidity Provider.\n        @param status            The new status of `liquidityProvider`.\n     */\n    event LPStatusChanged(address indexed liquidityProvider, bool status);\n\n    /**\n        @dev   Emits an event indicating a that the Liquidity Cap for the Pool was set.\n        @param newLiquidityCap The new liquidity cap.\n     */\n    event LiquidityCapSet(uint256 newLiquidityCap);\n\n    /**\n        @dev   Emits an event indicating a that the lockup period for the Pool was set.\n        @param newLockupPeriod The new lockup cap.\n     */\n    event LockupPeriodSet(uint256 newLockupPeriod);\n\n    /**\n        @dev   Emits an event indicating a that the staking fee for the Pool was set.\n        @param newStakingFee The new fee Stakers earn (in basis points).\n     */\n    event StakingFeeSet(uint256 newStakingFee);\n\n    /**\n        @dev   Emits an event indicating a that the state of the Pool has changed.\n        @param state The new state of the Pool.\n     */\n    event PoolStateChanged(State state);\n\n    /**\n        @dev   Emits an event indicating a that the withdrawal cooldown for a Liquidity Provider of the Pool has updated.\n        @param liquidityProvider The address of a Liquidity Provider.\n        @param cooldown          The new withdrawal cooldown.\n     */\n    event Cooldown(address indexed liquidityProvider, uint256 cooldown);\n\n    /**\n        @dev   Emits an event indicating a that a Pool's openness to the public has changed.\n        @param isOpen Whether the Pool is open to the public to add liquidity.\n     */\n    event PoolOpenedToPublic(bool isOpen);\n\n    /**\n        @dev   Emits an event indicating a that a PoolAdmin was set.\n        @param poolAdmin The address of a PoolAdmin.\n        @param allowed   Whether `poolAdmin` is an admin of the Pool.\n     */\n    event PoolAdminSet(address indexed poolAdmin, bool allowed);\n\n    /**\n        @dev   Emits an event indicating a that a Liquidity Provider's effective deposit date has changed.\n        @param liquidityProvider The address of a Liquidity Provider.\n        @param depositDate       The new effective deposit date.\n     */\n    event DepositDateUpdated(address indexed liquidityProvider, uint256 depositDate);\n\n    /**\n        @dev   Emits an event indicating a that a Liquidity Provider's total amount in custody of custodians has changed.\n        @param liquidityProvider The address of a Liquidity Provider.\n        @param newTotalAllowance The total amount in custody of custodians for `liquidityProvider`.\n     */\n    event TotalCustodyAllowanceUpdated(address indexed liquidityProvider, uint256 newTotalAllowance);\n\n    /**\n        @dev   Emits an event indicating the one of the Pool's Loans defaulted.\n        @param loan                            The address of the Loan that defaulted.\n        @param defaultSuffered                 The amount of default suffered.\n        @param bptsBurned                      The amount of BPTs burned to recover funds.\n        @param bptsReturned                    The amount of BPTs returned to Liquidity Provider.\n        @param liquidityAssetRecoveredFromBurn The amount of Liquidity Asset recovered from burning BPTs.\n     */\n    event DefaultSuffered(\n        address indexed loan,\n        uint256 defaultSuffered,\n        uint256 bptsBurned,\n        uint256 bptsReturned,\n        uint256 liquidityAssetRecoveredFromBurn\n    );\n\n    /**\n        @dev The factory type of `DebtLockerFactory`.\n     */\n    function DL_FACTORY() external pure returns (uint8);\n\n    /**\n        @dev The asset deposited by Lenders into the LiquidityLocker, for funding Loans.\n     */\n    function liquidityAsset() external pure returns (IERC20);\n\n    /**\n        @dev The Pool Delegate address, maintains full authority over the Pool.\n     */\n    function poolDelegate() external pure returns (address);\n\n    /**\n        @dev The address of the asset deposited by Stakers into the StakeLocker (BPTs), for liquidation during default events.\n     */\n    function liquidityLocker() external pure returns (address);\n\n    /**\n        @dev The address of the asset deposited by Stakers into the StakeLocker (BPTs), for liquidation during default events.\n     */\n    function stakeAsset() external pure returns (address);\n\n    /**\n        @dev The address of the StakeLocker, escrowing `stakeAsset`.\n     */\n    function stakeLocker() external pure returns (address);\n\n    /**\n        @dev The factory that deployed this Loan.\n     */\n    function superFactory() external pure returns (address);\n\n    /**\n        @dev The fee Stakers earn (in basis points).\n     */\n    function stakingFee() external view returns (uint256);\n\n    /**\n        @dev The fee the Pool Delegate earns (in basis points).\n     */\n    function delegateFee() external pure returns (uint256);\n\n    /**\n        @dev The sum of all outstanding principal on Loans.\n     */\n    function principalOut() external view returns (uint256);\n\n    /**\n        @dev The amount of liquidity tokens accepted by the Pool.\n     */\n    function liquidityCap() external view returns (uint256);\n\n    /**\n        @dev The period of time from an account's deposit date during which they cannot withdraw any funds.\n     */\n    function lockupPeriod() external view returns (uint256);\n\n    /**\n        @dev Whether the Pool is open to the public for LP deposits.\n     */\n    function openToPublic() external view returns (bool);\n\n    /**\n        @dev The state of the Pool.\n     */\n    function poolState() external view returns (State);\n\n    /**\n        @dev    Used for withdraw penalty calculation.\n        @param  account The address of an account.\n        @return The unix timestamp of the weighted average deposit date of `account`.\n     */\n    function depositDate(address account) external view returns (uint256);\n\n    /**\n        @param  loan              The address of a Loan.\n        @param  debtLockerFactory The address of a DebtLockerFactory.\n        @return The address of the DebtLocker corresponding to `loan` and `debtLockerFactory`.\n     */\n    function debtLockers(address loan, address debtLockerFactory) external view returns (address);\n\n    /**\n        @param  poolAdmin The address of a PoolAdmin.\n        @return Whether `poolAdmin` has permission to do certain operations in case of disaster management.\n     */\n    function poolAdmins(address poolAdmin) external view returns (bool);\n\n    /**\n        @param  liquidityProvider The address of a LiquidityProvider.\n        @return Whether `liquidityProvider` has early access to the Pool.\n     */\n    function allowedLiquidityProviders(address liquidityProvider) external view returns (bool);\n\n    /**\n        @param  liquidityProvider The address of a LiquidityProvider.\n        @return The unix timestamp of when individual LPs have notified of their intent to withdraw.\n     */\n    function withdrawCooldown(address liquidityProvider) external view returns (uint256);\n\n    /**\n        @param  account   The address of an account.\n        @param  custodian The address of a custodian.\n        @return The amount of PoolFDTs 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 PoolFDTs that are \"locked\" for `account`. Cannot be greater than the account's balance.\n     */\n    function totalCustodyAllowance(address account) external view returns (uint256);\n\n    /**\n        @dev Finalizes the Pool, enabling deposits. \n        @dev Checks the amount the Pool Delegate deposited to the StakeLocker. \n        @dev Only the Pool Delegate can call this function. \n        @dev It emits a `PoolStateChanged` event. \n     */\n    function finalize() external;\n\n    /**\n        @dev   Funds a Loan for an amount, utilizing the supplied DebtLockerFactory for DebtLockers. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `LoanFunded` event. \n        @dev   It emits a `BalanceUpdated` event. \n        @param loan      The address of the Loan to fund.\n        @param dlFactory The address of the DebtLockerFactory to utilize.\n        @param amt       The amount to fund the Loan.\n     */\n    function fundLoan(address loan, address dlFactory, uint256 amt) external;\n\n    /**\n        @dev   Liquidates a Loan. \n        @dev   The Pool Delegate could liquidate the Loan only when the Loan completes its grace period. \n        @dev   The Pool Delegate can claim its proportion of recovered funds from the liquidation using the `claim()` function. \n        @dev   Only the Pool Delegate can call this function. \n        @param loan      The address of the Loan to liquidate.\n        @param dlFactory The address of the DebtLockerFactory that is used to pull corresponding DebtLocker.\n     */\n    function triggerDefault(address loan, address dlFactory) external;\n\n    /**\n        @dev    Claims available funds for the Loan through a specified DebtLockerFactory. \n        @dev    Only the Pool Delegate or a Pool Admin can call this function. \n        @dev    It emits two `BalanceUpdated` events. \n        @dev    It emits a `Claim` event. \n        @param  loan      The address of the loan to claim from.\n        @param  dlFactory The address of the DebtLockerFactory.\n        @return claimInfo The claim details. \n                    [0] => Total amount claimed, \n                    [1] => Interest portion claimed, \n                    [2] => Principal portion claimed, \n                    [3] => Fee portion claimed, \n                    [4] => Excess portion claimed, \n                    [5] => Recovered portion claimed (from liquidations), \n                    [6] => Default suffered. \n     */\n    function claim(address loan, address dlFactory) external returns (uint256[7] memory claimInfo);\n\n    /**\n        @dev Triggers deactivation, permanently shutting down the Pool. \n        @dev Must have less than 100 USD worth of Liquidity Asset `principalOut`. \n        @dev Only the Pool Delegate can call this function. \n        @dev It emits a `PoolStateChanged` event. \n     */\n    function deactivate() external;\n    \n    /**\n        @dev   Sets the liquidity cap. \n        @dev   Only the Pool Delegate or a Pool Admin can call this function. \n        @dev   It emits a `LiquidityCapSet` event. \n        @param newLiquidityCap The new liquidity cap value.\n     */\n    function setLiquidityCap(uint256 newLiquidityCap) external;\n\n    /**\n        @dev   Sets the lockup period. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `LockupPeriodSet` event. \n        @param newLockupPeriod The new lockup period used to restrict the withdrawals.\n     */\n    function setLockupPeriod(uint256 newLockupPeriod) external;\n\n    /**\n        @dev   Sets the staking fee. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `StakingFeeSet` event. \n        @param newStakingFee The new staking fee.\n     */\n    function setStakingFee(uint256 newStakingFee) external;\n\n    /**\n        @dev   Sets the account status in the Pool's allowlist. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits an `LPStatusChanged` event. \n        @param account The address to set status for.\n        @param status  The status of an account in the allowlist.\n     */\n    function setAllowList(address account, bool status) external;\n\n    /**\n        @dev   Sets a Pool Admin. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `PoolAdminSet` event. \n        @param poolAdmin An address being allowed or disallowed as a Pool Admin.\n        @param allowed   Whether `poolAdmin` is an admin of the Pool.\n     */\n    function setPoolAdmin(address poolAdmin, bool allowed) external;\n\n    /**\n        @dev   Sets whether the Pool is open to the public. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `PoolOpenedToPublic` event. \n        @param open Whether the Pool is open to liquidity from the public.\n     */\n    function setOpenToPublic(bool open) external;\n\n    /**\n        @dev   Handles Liquidity Providers depositing of Liquidity Asset into the LiquidityLocker, minting PoolFDTs. \n        @dev   It emits a `DepositDateUpdated` event. \n        @dev   It emits a `BalanceUpdated` event. \n        @dev   It emits a `Cooldown` event. \n        @param amt The amount of Liquidity Asset to deposit.\n     */\n    function deposit(uint256 amt) external;\n\n    /**\n        @dev Activates the cooldown period to withdraw. \n        @dev It can't be called if the account is not providing liquidity. \n        @dev It emits a `Cooldown` event. \n     */\n    function intendToWithdraw() external;\n\n    /**\n        @dev Cancels an initiated withdrawal by resetting the account's withdraw cooldown. \n        @dev It emits a `Cooldown` event. \n     */\n    function cancelWithdraw() external;\n\n    /**\n        @dev   Handles Liquidity Providers withdrawing of Liquidity Asset from the LiquidityLocker, burning PoolFDTs. \n        @dev   It emits two `BalanceUpdated` event. \n        @param amt The amount of Liquidity Asset to withdraw.\n     */\n    function withdraw(uint256 amt) external;\n\n    /**\n        @dev Withdraws all claimable interest from the LiquidityLocker for an account using `interestSum` accounting. \n        @dev It emits a `BalanceUpdated` event. \n     */\n    function withdrawFunds() external override;\n\n    /**\n        @dev   Increases the custody allowance for a given Custodian corresponding to the calling 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 PoolFDTs 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 PoolFDTs.\n        @param to     The address which will be the new owner of the amount of PoolFDTs.\n        @param amount The amount of PoolFDTs transferred.\n     */\n    function transferByCustodian(address from, address to, uint256 amount) external;\n\n    /**\n        @dev   Transfers any locked funds to the Governor. \n        @dev   Only the Governor can call this function. \n        @param token The address of the token to be reclaimed.\n     */\n    function reclaimERC20(address token) external;\n    \n    /**\n        @dev    Calculates the value of BPT in units of Liquidity Asset.\n        @param  _bPool          The address of Balancer pool.\n        @param  _liquidityAsset The asset used by Pool for liquidity to fund Loans.\n        @param  _staker         The address that deposited BPTs to StakeLocker.\n        @param  _stakeLocker    Escrows BPTs deposited by Staker.\n        @return USDC value of staker BPTs.\n     */\n    function BPTVal(\n        address _bPool,\n        address _liquidityAsset,\n        address _staker,\n        address _stakeLocker\n    ) external view returns (uint256);\n\n    /**\n        @dev   Checks that the given deposit amount is acceptable based on current liquidityCap.\n        @param depositAmt The amount of tokens (i.e liquidityAsset type) the account is trying to deposit.\n     */\n    function isDepositAllowed(uint256 depositAmt) external view returns (bool);\n\n    /**\n        @dev    Returns information on the stake requirements.\n        @return The min amount of Liquidity Asset coverage from staking required.\n        @return The present amount of Liquidity Asset coverage from the Pool Delegate stake.\n        @return Whether enough stake is present from the Pool Delegate for finalization.\n        @return The staked BPTs required for minimum Liquidity Asset coverage.\n        @return The current staked BPTs.\n     */\n    function getInitialStakeRequirements() external view returns (uint256, uint256, bool, uint256, uint256);\n\n    /**\n        @dev    Calculates BPTs required if burning BPTs for the Liquidity Asset, given supplied `tokenAmountOutRequired`.\n        @param  _bPool                        The Balancer pool that issues the BPTs.\n        @param  _liquidityAsset               Swap out asset (e.g. USDC) to receive when burning BPTs.\n        @param  _staker                       The address that deposited BPTs to StakeLocker.\n        @param  _stakeLocker                  Escrows BPTs deposited by Staker.\n        @param  _liquidityAssetAmountRequired The amount of Liquidity Asset required to recover.\n        @return The `poolAmountIn` required.\n        @return The `poolAmountIn` currently staked.\n     */\n    function getPoolSharesRequired(\n        address _bPool,\n        address _liquidityAsset,\n        address _staker,\n        address _stakeLocker,\n        uint256 _liquidityAssetAmountRequired\n    ) external view returns (uint256, uint256);\n\n    /**\n      @dev    Checks that the Pool state is `Finalized`.\n      @return Whether the Pool is in a Finalized state.\n     */\n    function isPoolFinalized() external view returns (bool);\n\n}\n\n////// contracts/core/pool/v1/interfaces/IPoolFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IMapleGlobals } from \"../../../globals/v1/interfaces/IMapleGlobals.sol\"; */\n\n/// @title PoolFactory instantiates Pools.\ninterface IPoolFactory {\n\n    /**\n        @dev   Emits an event indicating a PoolFactoryAdmin was allowed.\n        @param poolFactoryAdmin The address of a PoolFactoryAdmin.\n        @param allowed          Whether `poolFactoryAdmin` is allowed as an admin of the PoolFactory.\n     */\n    event PoolFactoryAdminSet(address indexed poolFactoryAdmin, bool allowed);\n\n    /**\n        @dev   Emits an event indicating a Pool was created.\n        @param pool             The address of the Pool.\n        @param delegate         The PoolDelegate.\n        @param liquidityAsset   The asset Loans will be funded in.\n        @param stakeAsset       The asset stake will be locked in.\n        @param liquidityLocker  The address of the LiquidityLocker.\n        @param stakeLocker      The address of the StakeLocker.\n        @param stakingFee       The fee paid to stakers on Loans.\n        @param stakingFee       The fee paid to the Pool Delegate on Loans.\n        @param liquidityCap     The maximum liquidity the Pool will hold.\n        @param name             The name of the Pool FDTs.\n        @param symbol           The symbol of the Pool FDTs.\n     */\n    event PoolCreated(\n        address indexed pool,\n        address indexed delegate,\n        address liquidityAsset,\n        address stakeAsset,\n        address liquidityLocker,\n        address stakeLocker,\n        uint256 stakingFee,\n        uint256 delegateFee,\n        uint256 liquidityCap,\n        string  name,\n        string  symbol\n    );\n\n    /**\n        @dev The factory type of `LiquidityLockerFactory`.\n     */\n    function LL_FACTORY() external view returns (uint8);\n\n    /**\n        @dev The factory type of `StakeLockerFactory`.\n     */\n    function SL_FACTORY() external view returns (uint8);\n\n    /**\n        @dev The incrementor for number of Pools created.\n     */\n    function poolsCreated() external view returns (uint256);\n\n    /**\n        @dev The current MapleGlobals instance.\n     */\n    function globals() external view returns (IMapleGlobals);\n\n    /**\n        @param  index An index of a Pool.\n        @return The address of the Pool at `index`.\n     */\n    function pools(uint256 index) external view returns (address);\n\n    /**\n        @param  pool The address of a Pool.\n        @return Whether the contract at `address` is a Pool.\n     */\n    function isPool(address pool) external view returns (bool);\n\n    /**\n        @param  poolFactoryAdmin The address of a PoolFactoryAdmin.\n        @return Whether the `poolFactoryAdmin` has permission to do certain operations in case of disaster management\n     */\n    function poolFactoryAdmins(address poolFactoryAdmin) external view returns (bool);\n\n    /**\n        @dev   Sets MapleGlobals instance. \n        @dev   Only the Governor can call this function. \n        @param newGlobals The address of new MapleGlobals.\n     */\n    function setGlobals(address newGlobals) external;\n\n    /**\n        @dev    Instantiates a Pool. \n        @dev    It emits a `PoolCreated` event. \n        @param  liquidityAsset The asset escrowed in a LiquidityLocker.\n        @param  stakeAsset     The asset escrowed in a StakeLocker.\n        @param  slFactory      The factory to instantiate a StakeLocker from.\n        @param  llFactory      The factory to instantiate a LiquidityLocker from.\n        @param  stakingFee     The fee that Stakers earn on interest, in basis points.\n        @param  delegateFee    The fee that the Pool Delegate earns on interest, in basis points.\n        @param  liquidityCap   The amount of Liquidity Asset accepted by the Pool.\n        @return poolAddress    The address of the instantiated Pool.\n     */\n    function createPool(\n        address liquidityAsset,\n        address stakeAsset,\n        address slFactory,\n        address llFactory,\n        uint256 stakingFee,\n        uint256 delegateFee,\n        uint256 liquidityCap\n    ) external returns (address poolAddress);\n\n    /**\n        @dev   Sets a PoolFactory Admin. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `PoolFactoryAdminSet` event. \n        @param poolFactoryAdmin An address being allowed or disallowed as a PoolFactory Admin.\n        @param allowed          Whether `poolFactoryAdmin` is allowed as a PoolFactory Admin.\n     */\n    function setPoolFactoryAdmin(address poolFactoryAdmin, bool allowed) external;\n\n    /**\n        @dev Triggers paused state. \n        @dev Halts functionality for certain functions. \n        @dev Only the Governor or a PoolFactory 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 Governor or a PoolFactory Admin can call this function. \n     */\n    function unpause() 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\n////// contracts/core/stake-locker/v1/interfaces/IStakeLockerFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ISubFactory } from \"../../../subfactory/v1/interfaces/ISubFactory.sol\"; */\n\n/// @title StakeLockerFactory instantiates StakeLockers.\ninterface IStakeLockerFactory is ISubFactory {\n\n    /**\n        @dev   Emits an event indicating a StakeLocker was created.\n        @param owner          The owner of the StakeLocker.\n        @param stakeLocker    The address of the StakeLocker.\n        @param stakeAsset     The Stake Asset this StakeLocker will escrow.\n        @param liquidityAsset The address of the Liquidity Asset (as defined in the Pool).\n        @param name           The name of the StakeLockerFDTs.\n        @param symbol         The symbol of the StakeLockerFDTs.\n     */\n    event StakeLockerCreated(\n        address indexed owner,\n        address stakeLocker,\n        address stakeAsset,\n        address liquidityAsset,\n        string name,\n        string symbol\n    );\n\n    /**\n        @param  stakeLocker The address of a StakeLocker.\n        @return The address of the owner of StakeLocker at `stakeLocker`.\n     */\n    function owner(address stakeLocker) external returns (address);\n\n    /**\n        @param  stakeLocker Some address.\n        @return Whether `stakeLocker` is a StakeLocker.\n     */\n    function isLocker(address stakeLocker) external returns (bool);\n\n    /**\n        @dev The type of the factory (i.e FactoryType::STAKE_LOCKER_FACTORY).\n     */\n    function factoryType() external override pure returns (uint8);\n\n    /**\n        @dev    Instantiate a StakeLocker.\n        @dev    It emits a `StakeLockerCreated` event.\n        @param  stakeAsset     The address of the Stake Asset (generally Balancer Pool BPTs).\n        @param  liquidityAsset The address of the Liquidity Asset (as defined in the Pool).\n        @return stakeLocker    The address of the instantiated StakeLocker.\n     */\n    function newLocker(address stakeAsset, address liquidityAsset) external returns (address stakeLocker);\n\n}\n\n////// contracts/external-interfaces/IBPool.sol\n/* pragma solidity 0.6.11; */\n\ninterface IBPool {\n\n    function transfer(address, uint256) external returns (bool);\n\n    function INIT_POOL_SUPPLY() external view returns (uint256);\n\n    function MAX_OUT_RATIO() external view returns (uint256);\n\n    function bind(address, uint256, uint256) external;\n\n    function balanceOf(address) external view returns (uint256);\n\n    function finalize() external;\n\n    function gulp(address) external;\n\n    function isFinalized() external view returns (bool);\n\n    function isBound(address) external view returns (bool);\n\n    function getNumTokens() external view returns (uint256);\n\n    function getBalance(address) external view returns (uint256);\n\n    function getNormalizedWeight(address) external view returns (uint256);\n\n    function getDenormalizedWeight(address) external view returns (uint256);\n\n    function getTotalDenormalizedWeight() external view returns (uint256);\n\n    function getSwapFee() external view returns (uint256);\n\n    function totalSupply() external view returns (uint256);\n\n    function getFinalTokens() external view returns (address[] memory);\n\n    function joinPool(uint poolAmountOut, uint[] calldata maxAmountsIn) external;\n\n    function calcSingleOutGivenPoolIn(\n        uint256 tokenBalanceOut,\n        uint256 tokenWeightOut,\n        uint256 poolSupply,\n        uint256 totalWeight,\n        uint256 poolAmountIn,\n        uint256 swapFee\n    ) external pure returns (uint256);\n\n    function calcPoolInGivenSingleOut(\n        uint256 tokenBalanceOut,\n        uint256 tokenWeightOut,\n        uint256 poolSupply,\n        uint256 totalWeight,\n        uint256 tokenAmountOut,\n        uint256 swapFee\n    ) external pure returns (uint256);\n\n    function exitswapExternAmountOut(\n        address tokenOut,\n        uint256 tokenAmountOut,\n        uint256 maxPoolAmountIn\n    ) external returns (uint256 poolAmountIn);\n\n}\n\n////// contracts/external-interfaces/IERC20Details.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\ninterface IERC20Details is IERC20 {\n\n    function name() external view returns (string memory);\n\n    function symbol() external view returns (string memory);\n\n    function decimals() external view returns (uint256);\n\n}\n\n////// lib/openzeppelin-contracts/contracts/utils/Address.sol\n/* pragma solidity >=0.6.2 <0.8.0; */\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize, which returns 0 for contracts in\n        // construction, since the code is only stored at the end of the\n        // constructor execution.\n\n        uint256 size;\n        // solhint-disable-next-line no-inline-assembly\n        assembly { size := extcodesize(account) }\n        return size > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n        (bool success, ) = recipient.call{ value: amount }(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain`call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n      return functionCall(target, data, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        require(isContract(target), \"Address: call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.call{ value: value }(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n        require(isContract(target), \"Address: static call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            // Look for revert reason and bubble it up if present\n            if (returndata.length > 0) {\n                // The easiest way to bubble the revert reason is using memory via assembly\n\n                // solhint-disable-next-line no-inline-assembly\n                assembly {\n                    let returndata_size := mload(returndata)\n                    revert(add(32, returndata), returndata_size)\n                }\n            } else {\n                revert(errorMessage);\n            }\n        }\n    }\n}\n\n////// lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/* import \"./IERC20.sol\"; */\n/* import \"../../math/SafeMath.sol\"; */\n/* import \"../../utils/Address.sol\"; */\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n    using SafeMath for uint256;\n    using Address for address;\n\n    function safeTransfer(IERC20 token, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n    }\n\n    /**\n     * @dev Deprecated. This function has issues similar to the ones found in\n     * {IERC20-approve}, and its usage is discouraged.\n     *\n     * Whenever possible, use {safeIncreaseAllowance} and\n     * {safeDecreaseAllowance} instead.\n     */\n    function safeApprove(IERC20 token, address spender, uint256 value) internal {\n        // safeApprove should only be called when setting an initial allowance,\n        // or when resetting it to zero. To increase and decrease it, use\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n        // solhint-disable-next-line max-line-length\n        require((value == 0) || (token.allowance(address(this), spender) == 0),\n            \"SafeERC20: approve from non-zero to non-zero allowance\"\n        );\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n    }\n\n    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n        uint256 newAllowance = token.allowance(address(this), spender).add(value);\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n        uint256 newAllowance = token.allowance(address(this), spender).sub(value, \"SafeERC20: decreased allowance below zero\");\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     */\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n        // the target address contains contract code and also asserts for success in the low-level call.\n\n        bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n        if (returndata.length > 0) { // Return data is optional\n            // solhint-disable-next-line max-line-length\n            require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n        }\n    }\n}\n\n////// contracts/libraries/pool/v1/PoolLib.sol\n/* pragma solidity 0.6.11; */\n\n/* import { SafeMath }          from \"../../../../lib/openzeppelin-contracts/contracts/math/SafeMath.sol\"; */\n/* import { IERC20, SafeERC20 } from \"../../../../lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\"; */\n\n/* import { IBPool }        from \"../../../external-interfaces/IBPool.sol\"; */\n/* import { IERC20Details } from \"../../../external-interfaces/IERC20Details.sol\"; */\n\n/* import { IDebtLockerFactory } from \"../../../core/debt-locker/v1/interfaces/IDebtLockerFactory.sol\"; */\n/* import { IMapleGlobals }      from \"../../../core/globals/v1/interfaces/IMapleGlobals.sol\"; */\n/* import { ILoan }              from \"../../../core/loan/v1/interfaces/ILoan.sol\"; */\n/* import { ILoanFactory }       from \"../../../core/loan/v1/interfaces/ILoanFactory.sol\"; */\n/* import { ILiquidityLocker }   from \"../../../core/liquidity-locker/v1/interfaces/ILiquidityLocker.sol\"; */\n/* import { IStakeLocker }       from \"../../../core/stake-locker/v1/interfaces/IStakeLocker.sol\"; */\n\n/// @title PoolLib is a library of utility functions used by Pool.\nlibrary PoolLib {\n\n    using SafeMath for uint256;\n    using SafeERC20 for IERC20;\n\n    uint256 public constant MAX_UINT256 = uint256(-1);\n    uint256 public constant WAD         = 10 ** 18;\n    uint8   public constant DL_FACTORY  = 1;         // Factory type of DebtLockerFactory\n\n    event         LoanFunded(address indexed loan, address debtLocker, uint256 amountFunded);\n    event DepositDateUpdated(address indexed liquidityProvider, uint256 depositDate);\n\n    /***************************************/\n    /*** Pool Delegate Utility Functions ***/\n    /***************************************/\n\n    /**\n        @dev   Conducts sanity checks for Pools in the constructor.\n        @param globals        The instance of a MapleGlobals.\n        @param liquidityAsset The asset used by Pool for liquidity to fund loans.\n        @param stakeAsset     The asset escrowed in StakeLocker.\n        @param stakingFee     The fee that the Stakers earn on interest, in basis points.\n        @param delegateFee    The fee that the Pool Delegate earns on interest, in basis points.\n     */\n    function poolSanityChecks(\n        IMapleGlobals globals,\n        address liquidityAsset,\n        address stakeAsset,\n        uint256 stakingFee,\n        uint256 delegateFee\n    ) external view {\n        IBPool bPool = IBPool(stakeAsset);\n\n        require(globals.isValidLiquidityAsset(liquidityAsset), \"P:INVALID_LIQ_ASSET\");\n        require(stakingFee.add(delegateFee) <= 10_000,         \"P:INVALID_FEES\");\n        require(\n            globals.isValidBalancerPool(address(stakeAsset)) &&\n            bPool.isBound(globals.mpl())                     &&\n            bPool.isBound(liquidityAsset)                    &&\n            bPool.isFinalized(),\n            \"P:INVALID_BALANCER_POOL\"\n        );\n    }\n\n    /**\n        @dev   Funds a Loan for an amount, utilizing the supplied DebtLockerFactory for DebtLockers. \n        @dev   It emits a `LoanFunded` event. \n        @param debtLockers     The mapping reference that contains the DebtLocker contract address corresponding to the DebtLockerFactory and Loan.\n        @param superFactory    The address of the PoolFactory.\n        @param liquidityLocker The address of the LiquidityLocker contract attached with this Pool.\n        @param loan            The address of the Loan to fund.\n        @param dlFactory       The DebtLockerFactory to utilize.\n        @param amt             The amount to fund the Loan.\n     */\n    function fundLoan(\n        mapping(address => mapping(address => address)) storage debtLockers,\n        address superFactory,\n        address liquidityLocker,\n        address loan,\n        address dlFactory,\n        uint256 amt\n    ) external {\n        IMapleGlobals globals = IMapleGlobals(ILoanFactory(superFactory).globals());\n        address loanFactory   = ILoan(loan).superFactory();\n\n        // Auth checks.\n        require(globals.isValidLoanFactory(loanFactory),                        \"P:INVALID_LF\");\n        require(ILoanFactory(loanFactory).isLoan(loan),                         \"P:INVALID_L\");\n        require(globals.isValidSubFactory(superFactory, dlFactory, DL_FACTORY), \"P:INVALID_DLF\");\n\n        address debtLocker = debtLockers[loan][dlFactory];\n\n        // Instantiate DebtLocker if it doesn't exist withing this factory\n        if (debtLocker == address(0)) {\n            debtLocker = IDebtLockerFactory(dlFactory).newLocker(loan);\n            debtLockers[loan][dlFactory] = debtLocker;\n        }\n\n        // Fund the Loan.\n        ILiquidityLocker(liquidityLocker).fundLoan(loan, debtLocker, amt);\n\n        emit LoanFunded(loan, debtLocker, amt);\n    }\n\n    /**\n        @dev    Helper function used by Pool `claim` function, for when if a default has occurred.\n        @param  liquidityAsset                  The IERC20 of Liquidity Asset.\n        @param  stakeLocker                     The address of StakeLocker.\n        @param  stakeAsset                      The address of BPTs.\n        @param  defaultSuffered                 The amount of shortfall in defaulted Loan after liquidation.\n        @return bptsBurned                      The amount of BPTs burned to cover shortfall.\n        @return postBurnBptBal                  The amount of BPTs returned to StakeLocker after burn.\n        @return liquidityAssetRecoveredFromBurn The amount of Liquidity Asset recovered from burn.\n     */\n    function handleDefault(\n        IERC20  liquidityAsset,\n        address stakeLocker,\n        address stakeAsset,\n        uint256 defaultSuffered\n    )\n        external\n        returns (\n            uint256 bptsBurned,\n            uint256 postBurnBptBal,\n            uint256 liquidityAssetRecoveredFromBurn\n        )\n    {\n\n        IBPool bPool = IBPool(stakeAsset);  // stakeAsset = Balancer Pool Tokens\n\n        // Check amount of Liquidity Asset coverage that exists in the StakeLocker.\n        uint256 availableSwapOut = getSwapOutValueLocker(stakeAsset, address(liquidityAsset), stakeLocker);\n\n        // Pull BPTs from StakeLocker.\n        IStakeLocker(stakeLocker).pull(address(this), bPool.balanceOf(stakeLocker));\n\n        // To maintain accounting, account for direct transfers into Pool.\n        uint256 preBurnLiquidityAssetBal = liquidityAsset.balanceOf(address(this));\n        uint256 preBurnBptBal            = bPool.balanceOf(address(this));\n\n        // Burn enough BPTs for Liquidity Asset to cover default suffered.\n        bPool.exitswapExternAmountOut(\n            address(liquidityAsset),\n            availableSwapOut >= defaultSuffered ? defaultSuffered : availableSwapOut,  // Burn BPTs up to defaultSuffered amount\n            preBurnBptBal\n        );\n\n        // Return remaining BPTs to StakeLocker.\n        postBurnBptBal = bPool.balanceOf(address(this));\n        bptsBurned     = preBurnBptBal.sub(postBurnBptBal);\n        bPool.transfer(stakeLocker, postBurnBptBal);\n        liquidityAssetRecoveredFromBurn = liquidityAsset.balanceOf(address(this)).sub(preBurnLiquidityAssetBal);\n        IStakeLocker(stakeLocker).updateLosses(bptsBurned);  // Update StakeLockerFDT loss accounting for BPTs\n    }\n\n    /**\n        @dev    Calculates portions of claim from DebtLocker to be used by Pool `claim` function.\n        @param  claimInfo           [0] => Total Claimed, \n                                    [1] => Interest Claimed, \n                                    [2] => Principal Claimed, \n                                    [3] => Fee Claimed, \n                                    [4] => Excess Returned Claimed, \n                                    [5] => Amount Recovered (from Liquidation), \n                                    [6] => Default Suffered. \n        @param  delegateFee         The portion of interest (basis points) that goes to the Pool Delegate.\n        @param  stakingFee          The portion of interest (basis points) that goes to the StakeLocker.\n        @return poolDelegatePortion The total funds to send to the Pool Delegate.\n        @return stakeLockerPortion  The total funds to send to the StakeLocker.\n        @return principalClaim      The total principal claim.\n        @return interestClaim       The total interest claim.\n     */\n    function calculateClaimAndPortions(\n        uint256[7] calldata claimInfo,\n        uint256 delegateFee,\n        uint256 stakingFee\n    )\n        external\n        pure\n        returns (\n            uint256 poolDelegatePortion,\n            uint256 stakeLockerPortion,\n            uint256 principalClaim,\n            uint256 interestClaim\n        )\n    {\n        poolDelegatePortion = claimInfo[1].mul(delegateFee).div(10_000).add(claimInfo[3]);  // Pool Delegate portion of interest plus fee.\n        stakeLockerPortion  = claimInfo[1].mul(stakingFee).div(10_000);                     // StakeLocker portion of interest.\n\n        principalClaim = claimInfo[2].add(claimInfo[4]).add(claimInfo[5]);                                     // principal + excess + amountRecovered\n        interestClaim  = claimInfo[1].sub(claimInfo[1].mul(delegateFee).div(10_000)).sub(stakeLockerPortion);  // leftover interest\n    }\n\n    /**\n        @dev   Checks that the deactivation is allowed.\n        @param globals        The instance of a MapleGlobals.\n        @param principalOut   The amount of funds that are already funded to Loans.\n        @param liquidityAsset The Liquidity Asset of the Pool.\n     */\n    function validateDeactivation(IMapleGlobals globals, uint256 principalOut, address liquidityAsset) external view {\n        require(principalOut <= _convertFromUsd(globals, liquidityAsset, 100), \"P:PRINCIPAL_OUTSTANDING\");\n    }\n\n    /********************************************/\n    /*** Liquidity Provider Utility Functions ***/\n    /********************************************/\n\n    /**\n        @dev   Updates the effective deposit date based on how much new capital has been added. \n        @dev   If more capital is added, the deposit date moves closer to the current timestamp. \n        @dev   It emits a `DepositDateUpdated` event. \n        @param depositDate Storage reference to mapping of effective deposit dates.\n        @param balance     Balance of account depositing.\n        @param amt         Total deposit amount.\n        @param account     Address of account depositing.\n     */\n    function updateDepositDate(mapping(address => uint256) storage depositDate, uint256 balance, uint256 amt, address account) internal {\n        uint256 prevDate = depositDate[account];\n\n        // prevDate + (now - prevDate) * (amt / (balance + amt))\n        // NOTE: prevDate = 0 implies balance = 0, and equation reduces to now\n        uint256 newDate = (balance + amt) > 0\n            ? prevDate.add(block.timestamp.sub(prevDate).mul(amt).div(balance + amt))\n            : prevDate;\n\n        depositDate[account] = newDate;\n        emit DepositDateUpdated(account, newDate);\n    }\n\n    /**\n        @dev Performs all necessary checks for a `transferByCustodian` call. \n        @dev From and to must always be equal. \n        @param from   The address of the source of funds.\n        @param to     The address of the destination of funds.\n        @param amount The amount of funds transfer.\n     */\n    function transferByCustodianChecks(address from, address to, uint256 amount) external pure {\n        require(to == from,                 \"P:INVALID_RECEIVER\");\n        require(amount != uint256(0),       \"P:INVALID_AMT\");\n    }\n\n    /**\n        @dev  Performs all necessary checks for an `increaseCustodyAllowance` call.\n        @param custodian         The custodian where the funds will be locked to.\n        @param amount            The additional amount to custody.\n        @param newTotalAllowance The new total amount in custody, for some account.\n        @param fdtBal            The the total FDT balance of some account.\n     */\n    function increaseCustodyAllowanceChecks(address custodian, uint256 amount, uint256 newTotalAllowance, uint256 fdtBal) external pure {\n        require(custodian != address(0),     \"P:INVALID_CUSTODIAN\");\n        require(amount    != uint256(0),     \"P:INVALID_AMT\");\n        require(newTotalAllowance <= fdtBal, \"P:INSUF_BALANCE\");\n    }\n\n    /**********************************/\n    /*** Governor Utility Functions ***/\n    /**********************************/\n\n    /**\n        @dev   Transfers any locked funds to the Governor. \n        @dev    \\Only the Governor can call this function. \n        @param token          The address of the token to be reclaimed.\n        @param liquidityAsset The address of Liquidity Asset that is supported by the Pool.\n        @param globals        The instance of a MapleGlobals.\n     */\n    function reclaimERC20(address token, address liquidityAsset, IMapleGlobals globals) external {\n        require(msg.sender == globals.governor(), \"P:NOT_GOV\");\n        require(token != liquidityAsset && token != address(0), \"P:INVALID_TOKEN\");\n        IERC20(token).safeTransfer(msg.sender, IERC20(token).balanceOf(address(this)));\n    }\n\n    /************************/\n    /*** Getter Functions ***/\n    /************************/\n\n    /**\n        @dev Official Balancer pool bdiv() function. Does synthetic float with 10^-18 precision.\n     */\n    function _bdiv(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b != 0, \"P:DIV_ZERO\");\n        uint256 c0 = a * WAD;\n        require(a == 0 || c0 / a == WAD, \"P:DIV_INTERNAL\");  // bmul overflow\n        uint256 c1 = c0 + (b / 2);\n        require(c1 >= c0, \"P:DIV_INTERNAL\");  //  badd require\n        return c1 / b;\n    }\n\n    /**\n        @dev    Calculates the value of BPT in units of Liquidity Asset. \n        @dev    Vulnerable to flash-loan attacks where the attacker can artificially inflate the BPT price by swapping a large amount \n                of Liquidity Asset into the Pool and swapping back after this function is called. \n        @param  _bPool         The address of Balancer pool.\n        @param  liquidityAsset The asset used by Pool for liquidity to fund Loans.\n        @param  staker         The address that deposited BPTs to StakeLocker.\n        @param  stakeLocker    The contract that escrows the  BPTs deposited by Staker.\n        @return The USDC value of Staker BPTs.\n     */\n    function BPTVal(\n        address _bPool,\n        address liquidityAsset,\n        address staker,\n        address stakeLocker\n    ) external view returns (uint256) {\n        IBPool bPool = IBPool(_bPool);\n\n        // StakeLockerFDTs are minted 1:1 (in wei) in the StakeLocker when staking BPTs, thus representing stake amount.\n        // These are burned when withdrawing staked BPTs, thus representing the current stake amount.\n        uint256 amountStakedBPT       = IERC20(stakeLocker).balanceOf(staker);\n        uint256 totalSupplyBPT        = IERC20(_bPool).totalSupply();\n        uint256 liquidityAssetBalance = bPool.getBalance(liquidityAsset);\n        uint256 liquidityAssetWeight  = bPool.getNormalizedWeight(liquidityAsset);\n\n        // liquidityAsset value = (amountStaked/totalSupply) * (liquidityAssetBalance/liquidityAssetWeight)\n        return _bdiv(amountStakedBPT, totalSupplyBPT).mul(_bdiv(liquidityAssetBalance, liquidityAssetWeight)).div(WAD);\n    }\n\n    /**\n        @dev    Calculates Liquidity Asset swap out value of staker BPT balance escrowed in StakeLocker.\n        @param  _bPool         The Balancer pool that issues the BPTs.\n        @param  liquidityAsset The Swap out asset (e.g. USDC) to receive when burning BPTs.\n        @param  staker         The address that deposited BPTs to StakeLocker.\n        @param  stakeLocker    The contract that escrows BPTs deposited by Staker.\n        @return liquidityAsset The swap out value of staker BPTs.\n     */\n    function getSwapOutValue(\n        address _bPool,\n        address liquidityAsset,\n        address staker,\n        address stakeLocker\n    ) public view returns (uint256) {\n        return _getSwapOutValue(_bPool, liquidityAsset, IERC20(stakeLocker).balanceOf(staker));\n    }\n\n    /**\n        @dev    Calculates Liquidity Asset swap out value of entire BPT balance escrowed in StakeLocker.\n        @param  _bPool         The Balancer pool that issues the BPTs.\n        @param  liquidityAsset The swap out asset (e.g. USDC) to receive when burning BPTs.\n        @param  stakeLocker    The contract that escrows BPTs deposited by Staker.\n        @return liquidityAsset The swap out value of StakeLocker BPTs.\n     */\n    function getSwapOutValueLocker(\n        address _bPool,\n        address liquidityAsset,\n        address stakeLocker\n    ) public view returns (uint256) {\n        return _getSwapOutValue(_bPool, liquidityAsset, IBPool(_bPool).balanceOf(stakeLocker));\n    }\n\n    function _getSwapOutValue(\n        address _bPool,\n        address liquidityAsset,\n        uint256 poolAmountIn\n    ) internal view returns (uint256) {\n        // Fetch Balancer pool token information\n        IBPool bPool            = IBPool(_bPool);\n        uint256 tokenBalanceOut = bPool.getBalance(liquidityAsset);\n        uint256 tokenWeightOut  = bPool.getDenormalizedWeight(liquidityAsset);\n        uint256 poolSupply      = bPool.totalSupply();\n        uint256 totalWeight     = bPool.getTotalDenormalizedWeight();\n        uint256 swapFee         = bPool.getSwapFee();\n\n        // Returns the amount of liquidityAsset that can be recovered from BPT burning\n        uint256 tokenAmountOut = bPool.calcSingleOutGivenPoolIn(\n            tokenBalanceOut,\n            tokenWeightOut,\n            poolSupply,\n            totalWeight,\n            poolAmountIn,\n            swapFee\n        );\n\n        // Max amount that can be swapped based on amount of liquidityAsset in the Balancer Pool\n        uint256 maxSwapOut = tokenBalanceOut.mul(bPool.MAX_OUT_RATIO()).div(WAD);\n\n        return tokenAmountOut <= maxSwapOut ? tokenAmountOut : maxSwapOut;\n    }\n\n    /**\n        @dev    Calculates BPTs required if burning BPTs for liquidityAsset, given supplied tokenAmountOutRequired. \n        @dev    Vulnerable to flash-loan attacks where the attacker can artificially inflate the BPT price by swapping a large amount \n                of liquidityAsset into the pool and swapping back after this function is called.\n        @param  _bPool                       The Balancer pool that issues the BPTs.\n        @param  liquidityAsset               The swap out asset (e.g. USDC) to receive when burning BPTs.\n        @param  staker                       The address that deposited BPTs to stakeLocker.\n        @param  stakeLocker                  The contract that escrows BPTs deposited by staker.\n        @param  liquidityAssetAmountRequired The amount of liquidityAsset required to recover.\n        @return poolAmountInRequired         The required poolAmountIn.\n        @return stakerBalance                The poolAmountIn currently staked.\n     */\n    function getPoolSharesRequired(\n        address _bPool,\n        address liquidityAsset,\n        address staker,\n        address stakeLocker,\n        uint256 liquidityAssetAmountRequired\n    ) public view returns (uint256 poolAmountInRequired, uint256 stakerBalance) {\n        // Fetch Balancer pool token information.\n        IBPool bPool = IBPool(_bPool);\n\n        uint256 tokenBalanceOut = bPool.getBalance(liquidityAsset);\n        uint256 tokenWeightOut  = bPool.getDenormalizedWeight(liquidityAsset);\n        uint256 poolSupply      = bPool.totalSupply();\n        uint256 totalWeight     = bPool.getTotalDenormalizedWeight();\n        uint256 swapFee         = bPool.getSwapFee();\n\n        // Fetch amount of BPTs required to burn to receive Liquidity Asset amount required.\n        poolAmountInRequired = bPool.calcPoolInGivenSingleOut(\n            tokenBalanceOut,\n            tokenWeightOut,\n            poolSupply,\n            totalWeight,\n            liquidityAssetAmountRequired,\n            swapFee\n        );\n\n        // Fetch amount staked in StakeLocker by Staker.\n        stakerBalance = IERC20(stakeLocker).balanceOf(staker);\n    }\n\n    /**\n        @dev    Returns information on the stake requirements.\n        @param  globals                    The instance of a MapleGlobals.\n        @param  balancerPool               The address of Balancer pool.\n        @param  liquidityAsset             The address of Liquidity Asset, to be returned from swap out.\n        @param  poolDelegate               The address of Pool Delegate.\n        @param  stakeLocker                The address of StakeLocker.\n        @return swapOutAmountRequired      The minimum amount of Liquidity Asset coverage from staking required (in Liquidity Asset units).\n        @return currentPoolDelegateCover   The present amount of Liquidity Asset coverage from Pool Delegate stake (in Liquidity Asset units).\n        @return enoughStakeForFinalization Whether enough stake is present from Pool Delegate for Pool finalization.\n        @return poolAmountInRequired       The BPTs required for minimum Liquidity Asset coverage.\n        @return poolAmountPresent          The current staked BPTs.\n     */\n    function getInitialStakeRequirements(IMapleGlobals globals, address balancerPool, address liquidityAsset, address poolDelegate, address stakeLocker) external view returns (\n        uint256 swapOutAmountRequired,\n        uint256 currentPoolDelegateCover,\n        bool    enoughStakeForFinalization,\n        uint256 poolAmountInRequired,\n        uint256 poolAmountPresent\n    ) {\n        swapOutAmountRequired = _convertFromUsd(globals, liquidityAsset, globals.swapOutRequired());\n        (\n            poolAmountInRequired,\n            poolAmountPresent\n        ) = getPoolSharesRequired(balancerPool, liquidityAsset, poolDelegate, stakeLocker, swapOutAmountRequired);\n\n        currentPoolDelegateCover   = getSwapOutValue(balancerPool, liquidityAsset, poolDelegate, stakeLocker);\n        enoughStakeForFinalization = poolAmountPresent >= poolAmountInRequired;\n    }\n\n    /************************/\n    /*** Helper Functions ***/\n    /************************/\n\n    /**\n        @dev   Converts from WAD precision to Liquidity Asset precision.\n        @param amt                    The amount to convert.\n        @param liquidityAssetDecimals The Liquidity Asset decimal.\n     */\n    function fromWad(uint256 amt, uint256 liquidityAssetDecimals) external pure returns (uint256) {\n        return amt.mul(10 ** liquidityAssetDecimals).div(WAD);\n    }\n\n    /**\n        @dev    Returns Liquidity Asset in Liquidity Asset units when given integer USD (E.g., $100 = 100).\n        @param  globals        The instance of a MapleGlobals.\n        @param  liquidityAsset The Liquidity Asset of the pool.\n        @param  usdAmount      The USD amount to convert, in integer units (e.g., $100 = 100).\n        @return The usdAmount worth of Liquidity Asset, in Liquidity Asset units.\n    */\n    function _convertFromUsd(IMapleGlobals globals, address liquidityAsset, uint256 usdAmount) internal view returns (uint256) {\n        return usdAmount\n            .mul(10 ** 8)                                         // Cancel out 10 ** 8 decimals from oracle.\n            .mul(10 ** IERC20Details(liquidityAsset).decimals())  // Convert to Liquidity Asset precision.\n            .div(globals.getLatestPrice(liquidityAsset));         // Convert to Liquidity Asset value.\n    }\n\n}\n\n////// contracts/core/pool/v1/Pool.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ERC20 }             from \"../../../../lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\"; */\n/* import { IERC20, SafeERC20 } from \"../../../../lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\"; */\n\n/* import { PoolLib } from \"../../../libraries/pool/v1/PoolLib.sol\"; */\n\n/* import { IDebtLocker }             from \"../../debt-locker/v1/interfaces/IDebtLocker.sol\"; */\n/* import { IBasicFDT }               from \"../../funds-distribution-token/v1/interfaces/IBasicFDT.sol\"; */\n/* import { IMapleGlobals }           from \"../../globals/v1/interfaces/IMapleGlobals.sol\"; */\n/* import { ILiquidityLocker }        from \"../../liquidity-locker/v1/interfaces/ILiquidityLocker.sol\"; */\n/* import { ILiquidityLockerFactory } from \"../../liquidity-locker/v1/interfaces/ILiquidityLockerFactory.sol\"; */\n/* import { IStakeLocker }            from \"../../stake-locker/v1/interfaces/IStakeLocker.sol\"; */\n/* import { IStakeLockerFactory }     from \"../../stake-locker/v1/interfaces/IStakeLockerFactory.sol\"; */\n\n/* import { IPool }        from \"./interfaces/IPool.sol\"; */\n/* import { IPoolFactory } from \"./interfaces/IPoolFactory.sol\"; */\n\n/* import { PoolFDT } from \"./PoolFDT.sol\"; */\n\n/// @title Pool maintains all accounting and functionality related to Pools.\ncontract Pool is IPool, PoolFDT {\n\n    using SafeERC20 for IERC20;\n\n    uint256 constant WAD = 10 ** 18;\n\n    uint8 public override constant DL_FACTORY = 1;\n\n    IERC20 public override immutable liquidityAsset;\n\n    address public override immutable poolDelegate;\n    address public override immutable liquidityLocker;\n    address public override immutable stakeAsset;\n    address public override immutable stakeLocker;\n    address public override immutable superFactory;\n\n    uint256 private immutable liquidityAssetDecimals;  // The precision for the Liquidity Asset (i.e. `decimals()`).\n\n    uint256 public override           stakingFee;\n    uint256 public override immutable delegateFee;\n\n    uint256 public override principalOut;\n    uint256 public override liquidityCap;\n    uint256 public override lockupPeriod;\n\n    bool public override openToPublic;\n\n    State public override poolState;\n\n    mapping(address => uint256)                     public override depositDate;\n    mapping(address => mapping(address => address)) public override debtLockers;\n    mapping(address => bool)                        public override poolAdmins;\n    mapping(address => bool)                        public override allowedLiquidityProviders;\n    mapping(address => uint256)                     public override withdrawCooldown;\n    mapping(address => mapping(address => uint256)) public override custodyAllowance;\n    mapping(address => uint256)                     public override totalCustodyAllowance;\n\n    /**\n        Universal accounting law:\n                                       fdtTotalSupply = liquidityLockerBal + principalOut - interestSum + poolLosses\n            fdtTotalSupply + interestSum - poolLosses = liquidityLockerBal + principalOut\n    */\n\n    /**\n        @dev   Constructor for a Pool. \n        @dev   It emits a `PoolStateChanged` event. \n        @param _poolDelegate   Address that has manager privileges of the Pool.\n        @param _liquidityAsset Asset used to fund the Pool, It gets escrowed in LiquidityLocker.\n        @param _stakeAsset     Asset escrowed in StakeLocker.\n        @param _slFactory      Factory used to instantiate the StakeLocker.\n        @param _llFactory      Factory used to instantiate the LiquidityLocker.\n        @param _stakingFee     Fee that Stakers earn on interest, in basis points.\n        @param _delegateFee    Fee that the Pool Delegate earns on interest, in basis points.\n        @param _liquidityCap   Max amount of Liquidity Asset accepted by the Pool.\n        @param name            Name of Pool token.\n        @param symbol          Symbol of Pool token.\n     */\n    constructor(\n        address _poolDelegate,\n        address _liquidityAsset,\n        address _stakeAsset,\n        address _slFactory,\n        address _llFactory,\n        uint256 _stakingFee,\n        uint256 _delegateFee,\n        uint256 _liquidityCap,\n        string memory name,\n        string memory symbol\n    ) PoolFDT(name, symbol) public {\n\n        // Conduct sanity checks on Pool parameters.\n        PoolLib.poolSanityChecks(_globals(msg.sender), _liquidityAsset, _stakeAsset, _stakingFee, _delegateFee);\n\n        // Assign variables relating to the Liquidity Asset.\n        liquidityAsset         = IERC20(_liquidityAsset);\n        liquidityAssetDecimals = ERC20(_liquidityAsset).decimals();\n\n        // Assign state variables.\n        stakeAsset   = _stakeAsset;\n        poolDelegate = _poolDelegate;\n        stakingFee   = _stakingFee;\n        delegateFee  = _delegateFee;\n        superFactory = msg.sender;\n        liquidityCap = _liquidityCap;\n\n        // Instantiate the LiquidityLocker and the StakeLocker.\n        stakeLocker     = address(IStakeLockerFactory(_slFactory).newLocker(_stakeAsset, _liquidityAsset));\n        liquidityLocker = address(ILiquidityLockerFactory(_llFactory).newLocker(_liquidityAsset));\n\n        lockupPeriod = 180 days;\n\n        emit PoolStateChanged(State.Initialized);\n    }\n\n    /*******************************/\n    /*** Pool Delegate Functions ***/\n    /*******************************/\n\n    function finalize() external override {\n        _isValidDelegateAndProtocolNotPaused();\n        _isValidState(State.Initialized);\n        (,, bool stakeSufficient,,) = getInitialStakeRequirements();\n        require(stakeSufficient, \"P:INSUF_STAKE\");\n        poolState = State.Finalized;\n        emit PoolStateChanged(poolState);\n    }\n\n    function fundLoan(address loan, address dlFactory, uint256 amt) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        _isValidState(State.Finalized);\n        principalOut = principalOut.add(amt);\n        PoolLib.fundLoan(debtLockers, superFactory, liquidityLocker, loan, dlFactory, amt);\n        _emitBalanceUpdatedEvent();\n    }\n\n    function triggerDefault(address loan, address dlFactory) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        IDebtLocker(debtLockers[loan][dlFactory]).triggerDefault();\n    }\n\n    function claim(address loan, address dlFactory) external override returns (uint256[7] memory claimInfo) {\n        _whenProtocolNotPaused();\n        _isValidDelegateOrPoolAdmin();\n        claimInfo = IDebtLocker(debtLockers[loan][dlFactory]).claim();\n\n        (uint256 poolDelegatePortion, uint256 stakeLockerPortion, uint256 principalClaim, uint256 interestClaim) = PoolLib.calculateClaimAndPortions(claimInfo, delegateFee, stakingFee);\n\n        // Subtract outstanding principal by the principal claimed plus excess returned.\n        // Considers possible `principalClaim` overflow if Liquidity Asset is transferred directly into the Loan.\n        if (principalClaim <= principalOut) {\n            principalOut = principalOut - principalClaim;\n        } else {\n            interestClaim  = interestClaim.add(principalClaim - principalOut);  // Distribute `principalClaim` overflow as interest to LPs.\n            principalClaim = principalOut;                                      // Set `principalClaim` to `principalOut` so correct amount gets transferred.\n            principalOut   = 0;                                                 // Set `principalOut` to zero to avoid subtraction overflow.\n        }\n\n        // Accounts for rounding error in StakeLocker / Pool Delegate / LiquidityLocker interest split.\n        interestSum = interestSum.add(interestClaim);\n\n        _transferLiquidityAsset(poolDelegate, poolDelegatePortion);  // Transfer the fee and portion of interest to the Pool Delegate.\n        _transferLiquidityAsset(stakeLocker,  stakeLockerPortion);   // Transfer the portion of interest to the StakeLocker.\n\n        // Transfer remaining claim (remaining interest + principal + excess + recovered) to the LiquidityLocker.\n        // Dust will accrue in the Pool, but this ensures that state variables are in sync with the LiquidityLocker balance updates.\n        // Not using `balanceOf` in case of external address transferring the Liquidity Asset directly into Pool.\n        // Ensures that internal accounting is exactly reflective of balance change.\n        _transferLiquidityAsset(liquidityLocker, principalClaim.add(interestClaim));\n\n        // Handle default if defaultSuffered > 0.\n        if (claimInfo[6] > 0) _handleDefault(loan, claimInfo[6]);\n\n        // Update funds received for StakeLockerFDTs.\n        IStakeLocker(stakeLocker).updateFundsReceived();\n\n        // Update funds received for PoolFDTs.\n        updateFundsReceived();\n\n        _emitBalanceUpdatedEvent();\n        emit BalanceUpdated(stakeLocker, address(liquidityAsset), liquidityAsset.balanceOf(stakeLocker));\n\n        emit Claim(loan, interestClaim, principalClaim, claimInfo[3], stakeLockerPortion, poolDelegatePortion);\n    }\n\n    /**\n        @dev   Handles if a claim has been made and there is a non-zero defaultSuffered amount. \n        @dev   It emits a `DefaultSuffered` event. \n        @param loan            The address of a Loan that has defaulted.\n        @param defaultSuffered The losses suffered from default after liquidation.\n     */\n    function _handleDefault(address loan, uint256 defaultSuffered) internal {\n\n        (uint256 bptsBurned, uint256 postBurnBptBal, uint256 liquidityAssetRecoveredFromBurn) = PoolLib.handleDefault(liquidityAsset, stakeLocker, stakeAsset, defaultSuffered);\n\n        // If BPT burn is not enough to cover full default amount, pass on losses to LPs with PoolFDT loss accounting.\n        if (defaultSuffered > liquidityAssetRecoveredFromBurn) {\n            poolLosses = poolLosses.add(defaultSuffered - liquidityAssetRecoveredFromBurn);\n            updateLossesReceived();\n        }\n\n        // Transfer Liquidity Asset from burn to LiquidityLocker.\n        liquidityAsset.safeTransfer(liquidityLocker, liquidityAssetRecoveredFromBurn);\n\n        principalOut = principalOut.sub(defaultSuffered);  // Subtract rest of the Loan's principal from `principalOut`.\n\n        emit DefaultSuffered(\n            loan,                            // The Loan that suffered the default.\n            defaultSuffered,                 // Total default suffered from the Loan by the Pool after liquidation.\n            bptsBurned,                      // Amount of BPTs burned from StakeLocker.\n            postBurnBptBal,                  // Remaining BPTs in StakeLocker post-burn.\n            liquidityAssetRecoveredFromBurn  // Amount of Liquidity Asset recovered from burning BPTs.\n        );\n    }\n\n    function deactivate() external override {\n        _isValidDelegateAndProtocolNotPaused();\n        _isValidState(State.Finalized);\n        PoolLib.validateDeactivation(_globals(superFactory), principalOut, address(liquidityAsset));\n        poolState = State.Deactivated;\n        emit PoolStateChanged(poolState);\n    }\n\n    /**************************************/\n    /*** Pool Delegate Setter Functions ***/\n    /**************************************/\n\n    function setLiquidityCap(uint256 newLiquidityCap) external override {\n        _whenProtocolNotPaused();\n        _isValidDelegateOrPoolAdmin();\n        liquidityCap = newLiquidityCap;\n        emit LiquidityCapSet(newLiquidityCap);\n    }\n\n    function setLockupPeriod(uint256 newLockupPeriod) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        require(newLockupPeriod <= lockupPeriod, \"P:BAD_VALUE\");\n        lockupPeriod = newLockupPeriod;\n        emit LockupPeriodSet(newLockupPeriod);\n    }\n\n    function setStakingFee(uint256 newStakingFee) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        require(newStakingFee.add(delegateFee) <= 10_000, \"P:BAD_FEE\");\n        stakingFee = newStakingFee;\n        emit StakingFeeSet(newStakingFee);\n    }\n\n    function setAllowList(address account, bool status) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        allowedLiquidityProviders[account] = status;\n        emit LPStatusChanged(account, status);\n    }\n\n    function setPoolAdmin(address poolAdmin, bool allowed) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        poolAdmins[poolAdmin] = allowed;\n        emit PoolAdminSet(poolAdmin, allowed);\n    }\n\n    function setOpenToPublic(bool open) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        openToPublic = open;\n        emit PoolOpenedToPublic(open);\n    }\n\n    /************************************/\n    /*** Liquidity Provider Functions ***/\n    /************************************/\n\n    function deposit(uint256 amt) external override {\n        _whenProtocolNotPaused();\n        _isValidState(State.Finalized);\n        require(isDepositAllowed(amt), \"P:DEP_NOT_ALLOWED\");\n\n        withdrawCooldown[msg.sender] = uint256(0);  // Reset the LP's withdraw cooldown if they had previously intended to withdraw.\n\n        uint256 wad = _toWad(amt);\n        PoolLib.updateDepositDate(depositDate, balanceOf(msg.sender), wad, msg.sender);\n\n        liquidityAsset.safeTransferFrom(msg.sender, liquidityLocker, amt);\n        _mint(msg.sender, wad);\n\n        _emitBalanceUpdatedEvent();\n        emit Cooldown(msg.sender, uint256(0));\n    }\n\n    function intendToWithdraw() external override {\n        require(balanceOf(msg.sender) != uint256(0), \"P:ZERO_BAL\");\n        withdrawCooldown[msg.sender] = block.timestamp;\n        emit Cooldown(msg.sender, block.timestamp);\n    }\n\n    function cancelWithdraw() external override {\n        require(withdrawCooldown[msg.sender] != uint256(0), \"P:NOT_WITHDRAWING\");\n        withdrawCooldown[msg.sender] = uint256(0);\n        emit Cooldown(msg.sender, uint256(0));\n    }\n\n    /**\n        @dev   Checks that the account can withdraw an amount.\n        @param account The address of the account.\n        @param wad     The amount to withdraw.\n     */\n    function _canWithdraw(address account, uint256 wad) internal view {\n        require(depositDate[account].add(lockupPeriod) <= block.timestamp,     \"P:FUNDS_LOCKED\");     // Restrict withdrawal during lockup period\n        require(balanceOf(account).sub(wad) >= totalCustodyAllowance[account], \"P:INSUF_TRANS_BAL\");  // Account can only withdraw tokens that aren't custodied\n    }\n\n    function withdraw(uint256 amt) external override {\n        _whenProtocolNotPaused();\n        uint256 wad = _toWad(amt);\n        (uint256 lpCooldownPeriod, uint256 lpWithdrawWindow) = _globals(superFactory).getLpCooldownParams();\n\n        _canWithdraw(msg.sender, wad);\n        require((block.timestamp - (withdrawCooldown[msg.sender] + lpCooldownPeriod)) <= lpWithdrawWindow, \"P:WITHDRAW_NOT_ALLOWED\");\n\n        _burn(msg.sender, wad);  // Burn the corresponding PoolFDTs balance.\n        withdrawFunds();         // Transfer full entitled interest, decrement `interestSum`.\n\n        // Transfer amount that is due after realized losses are accounted for.\n        // Recognized losses are absorbed by the LP.\n        _transferLiquidityLockerFunds(msg.sender, amt.sub(_recognizeLosses()));\n\n        _emitBalanceUpdatedEvent();\n    }\n\n    /**\n        @dev   Transfers PoolFDTs.\n        @param from Th address  sending   PoolFDTs.\n        @param to   The address receiving PoolFDTs.\n        @param wad  The amount of PoolFDTs to transfer.\n     */\n    function _transfer(address from, address to, uint256 wad) internal override {\n        _whenProtocolNotPaused();\n\n        (uint256 lpCooldownPeriod, uint256 lpWithdrawWindow) = _globals(superFactory).getLpCooldownParams();\n\n        _canWithdraw(from, wad);\n        require(block.timestamp > (withdrawCooldown[to] + lpCooldownPeriod + lpWithdrawWindow), \"P:TO_NOT_ALLOWED\");  // Recipient must not be currently withdrawing.\n        require(recognizableLossesOf(from) == uint256(0),                                       \"P:RECOG_LOSSES\");    // If an LP has unrecognized losses, they must recognize losses using `withdraw`.\n\n        PoolLib.updateDepositDate(depositDate, balanceOf(to), wad, to);\n        super._transfer(from, to, wad);\n    }\n\n    function withdrawFunds() public override(IPool, IBasicFDT) {\n        _whenProtocolNotPaused();\n        uint256 withdrawableFunds = _prepareWithdraw();\n\n        if (withdrawableFunds == uint256(0)) return;\n\n        _transferLiquidityLockerFunds(msg.sender, withdrawableFunds);\n        _emitBalanceUpdatedEvent();\n\n        interestSum = interestSum.sub(withdrawableFunds);\n\n        _updateFundsTokenBalance();\n    }\n\n    function increaseCustodyAllowance(address custodian, uint256 amount) external override {\n        uint256 oldAllowance      = custodyAllowance[msg.sender][custodian];\n        uint256 newAllowance      = oldAllowance.add(amount);\n        uint256 newTotalAllowance = totalCustodyAllowance[msg.sender].add(amount);\n\n        PoolLib.increaseCustodyAllowanceChecks(custodian, amount, newTotalAllowance, balanceOf(msg.sender));\n\n        custodyAllowance[msg.sender][custodian] = newAllowance;\n        totalCustodyAllowance[msg.sender]       = newTotalAllowance;\n        emit CustodyAllowanceChanged(msg.sender, custodian, oldAllowance, newAllowance);\n        emit TotalCustodyAllowanceUpdated(msg.sender, newTotalAllowance);\n    }\n\n    function transferByCustodian(address from, address to, uint256 amount) external override {\n        uint256 oldAllowance = custodyAllowance[from][msg.sender];\n        uint256 newAllowance = oldAllowance.sub(amount);\n\n        PoolLib.transferByCustodianChecks(from, to, amount);\n\n        custodyAllowance[from][msg.sender] = newAllowance;\n        uint256 newTotalAllowance          = totalCustodyAllowance[from].sub(amount);\n        totalCustodyAllowance[from]        = newTotalAllowance;\n        emit CustodyTransfer(msg.sender, from, to, amount);\n        emit CustodyAllowanceChanged(from, msg.sender, oldAllowance, newAllowance);\n        emit TotalCustodyAllowanceUpdated(msg.sender, newTotalAllowance);\n    }\n\n    /**************************/\n    /*** Governor Functions ***/\n    /**************************/\n\n    function reclaimERC20(address token) external override {\n        PoolLib.reclaimERC20(token, address(liquidityAsset), _globals(superFactory));\n    }\n\n    /*************************/\n    /*** Getter Functions ***/\n    /*************************/\n\n    function BPTVal(\n        address _bPool,\n        address _liquidityAsset,\n        address _staker,\n        address _stakeLocker\n    ) external override view returns (uint256) {\n        return PoolLib.BPTVal(_bPool, _liquidityAsset, _staker, _stakeLocker);\n    }\n\n    function isDepositAllowed(uint256 depositAmt) public override view returns (bool) {\n        return (openToPublic || allowedLiquidityProviders[msg.sender]) &&\n               _balanceOfLiquidityLocker().add(principalOut).add(depositAmt) <= liquidityCap;\n    }\n\n    function getInitialStakeRequirements() public override view returns (uint256, uint256, bool, uint256, uint256) {\n        return PoolLib.getInitialStakeRequirements(_globals(superFactory), stakeAsset, address(liquidityAsset), poolDelegate, stakeLocker);\n    }\n\n    function getPoolSharesRequired(\n        address _bPool,\n        address _liquidityAsset,\n        address _staker,\n        address _stakeLocker,\n        uint256 _liquidityAssetAmountRequired\n    ) external override view returns (uint256, uint256) {\n        return PoolLib.getPoolSharesRequired(_bPool, _liquidityAsset, _staker, _stakeLocker, _liquidityAssetAmountRequired);\n    }\n\n    function isPoolFinalized() external override view returns (bool) {\n        return poolState == State.Finalized;\n    }\n\n    /************************/\n    /*** Helper Functions ***/\n    /************************/\n\n    /**\n        @dev   Converts to WAD precision.\n        @param amt The amount to convert.\n     */\n    function _toWad(uint256 amt) internal view returns (uint256) {\n        return amt.mul(WAD).div(10 ** liquidityAssetDecimals);\n    }\n\n    /**\n        @dev    Returns the balance of this Pool's LiquidityLocker.\n        @return The balance of LiquidityLocker.\n     */\n    function _balanceOfLiquidityLocker() internal view returns (uint256) {\n        return liquidityAsset.balanceOf(liquidityLocker);\n    }\n\n    /**\n        @dev   Checks that the current state of Pool matches the provided state.\n        @param _state A Pool state.\n     */\n    function _isValidState(State _state) internal view {\n        require(poolState == _state, \"P:BAD_STATE\");\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Pool Delegate.\n     */\n    function _isValidDelegate() internal view {\n        require(msg.sender == poolDelegate, \"P:NOT_DEL\");\n    }\n\n    /**\n        @dev Returns the MapleGlobals instance.\n     */\n    function _globals(address poolFactory) internal view returns (IMapleGlobals) {\n        return IMapleGlobals(IPoolFactory(poolFactory).globals());\n    }\n\n    /**\n        @dev Emits a `BalanceUpdated` event for LiquidityLocker. \n        @dev It emits a `BalanceUpdated` event. \n     */\n    function _emitBalanceUpdatedEvent() internal {\n        emit BalanceUpdated(liquidityLocker, address(liquidityAsset), _balanceOfLiquidityLocker());\n    }\n\n    /**\n        @dev   Transfers Liquidity Asset to given `to` address, from self (i.e. `address(this)`).\n        @param to    The address to transfer liquidityAsset.\n        @param value The amount of liquidity asset that gets transferred.\n     */\n    function _transferLiquidityAsset(address to, uint256 value) internal {\n        liquidityAsset.safeTransfer(to, value);\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Pool Delegate or a Pool Admin.\n     */\n    function _isValidDelegateOrPoolAdmin() internal view {\n        require(msg.sender == poolDelegate || poolAdmins[msg.sender], \"P:NOT_DEL_OR_ADMIN\");\n    }\n\n    /**\n        @dev Checks that the protocol is not in a paused state.\n     */\n    function _whenProtocolNotPaused() internal view {\n        require(!_globals(superFactory).protocolPaused(), \"P:PROTO_PAUSED\");\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Pool Delegate and that the protocol is not in a paused state.\n     */\n    function _isValidDelegateAndProtocolNotPaused() internal view {\n        _isValidDelegate();\n        _whenProtocolNotPaused();\n    }\n\n    function _transferLiquidityLockerFunds(address to, uint256 value) internal {\n        ILiquidityLocker(liquidityLocker).transfer(to, value);\n    }\n\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/core/pool/v1/Pool.sol": {
        "Address": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220eedcac9096c8c27b4b8f21083e57bf4c5405a3115d93441c63e8e222d4fbebee64736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xDC 0xAC SWAP1 SWAP7 0xC8 0xC2 PUSH28 0x4B8F21083E57BF4C5405A3115D93441C63E8E222D4FBEBEE64736F6C PUSH4 0x4300060B STOP CALLER ",
              "sourceMap": "136703:6704:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220eedcac9096c8c27b4b8f21083e57bf4c5405a3115d93441c63e8e222d4fbebee64736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xDC 0xAC SWAP1 SWAP7 0xC8 0xC2 PUSH28 0x4B8F21083E57BF4C5405A3115D93441C63E8E222D4FBEBEE64736F6C PUSH4 0x4300060B STOP CALLER ",
              "sourceMap": "136703:6704:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "BasicFDT": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "Context": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          }
        },
        "ERC20": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name_",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol_",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "60806040523480156200001157600080fd5b5060405162000ca538038062000ca5833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060405250508251620001b491506003906020850190620001e0565b508051620001ca906004906020840190620001e0565b50506005805460ff191660121790555062000285565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022357805160ff191683800117855562000253565b8280016001018555821562000253579182015b828111156200025357825182559160200191906001019062000236565b506200026192915062000265565b5090565b6200028291905b808211156200026157600081556001016200026c565b90565b610a1080620002956000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103ff565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610408565b6101736004803603602081101561021b57600080fd5b50356001600160a01b031661045c565b6100b6610477565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104d8565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610546565b610173600480360360408110156102a157600080fd5b506001600160a01b038135811691602001351661055a565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610585565b8484610589565b50600192915050565b60025490565b600061037f848484610675565b6103f58461038b610585565b6103f085604051806060016040528060288152602001610945602891396001600160a01b038a166000908152600160205260408120906103c9610585565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6107dc16565b610589565b5060019392505050565b60055460ff1690565b6000610363610415610585565b846103f08560016000610426610585565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61087316565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104e5610585565b846103f0856040518060600160405280602581526020016109b6602591396001600061050f610585565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6107dc16565b6000610363610553610585565b8484610675565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806109926024913960400191505060405180910390fd5b6001600160a01b0382166106135760405162461bcd60e51b81526004018080602001828103825260228152602001806108fd6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106ba5760405162461bcd60e51b815260040180806020018281038252602581526020018061096d6025913960400191505060405180910390fd5b6001600160a01b0382166106ff5760405162461bcd60e51b81526004018080602001828103825260238152602001806108da6023913960400191505060405180910390fd5b61070a8383836108d4565b61074d8160405180606001604052806026815260200161091f602691396001600160a01b038616600090815260208190526040902054919063ffffffff6107dc16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610782908263ffffffff61087316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561086b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610830578181015183820152602001610818565b50505050905090810190601f16801561085d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108cd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d1fbab9eeb253be1ff939623f0def7545dc8a6910e52573f1cf2f9dbe34f79c464736f6c634300060b0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xCA5 CODESIZE SUB DUP1 PUSH3 0xCA5 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xB8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xE6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x16A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x150 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x198 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP DUP3 MLOAD PUSH3 0x1B4 SWAP2 POP PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x1E0 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x1CA SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x1E0 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH3 0x285 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x223 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x253 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x253 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x253 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x236 JUMP JUMPDEST POP PUSH3 0x261 SWAP3 SWAP2 POP PUSH3 0x265 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x282 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x261 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x26C JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xA10 DUP1 PUSH3 0x295 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1D9 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x28B JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1BB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH2 0x36C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x3FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x408 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x45C JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x477 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4D8 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x546 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x55A JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x328 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x35C PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F DUP5 DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH2 0x3F5 DUP5 PUSH2 0x38B PUSH2 0x585 JUMP JUMPDEST PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x945 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x3C9 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x415 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x426 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x873 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x4E5 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9B6 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x50F PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x553 PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x992 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x613 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8FD PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6BA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x96D PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8DA PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x70A DUP4 DUP4 DUP4 PUSH2 0x8D4 JUMP JUMPDEST PUSH2 0x74D DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x91F PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x782 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x873 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x86B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x830 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x818 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x85D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220D1FB 0xAB SWAP15 0xEB 0x25 EXTCODESIZE 0xE1 SELFDESTRUCT SWAP4 SWAP7 0x23 CREATE 0xDE 0xF7 SLOAD 0x5D 0xC8 0xA6 SWAP2 0xE MSTORE JUMPI EXTCODEHASH SHR CALLCODE 0xF9 0xDB 0xE3 0x4F PUSH26 0xC464736F6C634300060B00330000000000000000000000000000 ",
              "sourceMap": "35397:9426:0:-:0;;;36034:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36034:145:0;;;;;;;;;;-1:-1:-1;36034:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36034:145:0;;;;;;;;;;-1:-1:-1;36034:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36034:145:0;;-1:-1:-1;;36108:13:0;;;;-1:-1:-1;36108:5:0;;:13;;;;;:::i;:::-;-1:-1:-1;36131:17:0;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;36158:9:0;:14;;-1:-1:-1;;36158:14:0;36170:2;36158:14;;;-1:-1:-1;35397:9426:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35397:9426:0;;;-1:-1:-1;35397:9426:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103ff565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610408565b6101736004803603602081101561021b57600080fd5b50356001600160a01b031661045c565b6100b6610477565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104d8565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610546565b610173600480360360408110156102a157600080fd5b506001600160a01b038135811691602001351661055a565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610585565b8484610589565b50600192915050565b60025490565b600061037f848484610675565b6103f58461038b610585565b6103f085604051806060016040528060288152602001610945602891396001600160a01b038a166000908152600160205260408120906103c9610585565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6107dc16565b610589565b5060019392505050565b60055460ff1690565b6000610363610415610585565b846103f08560016000610426610585565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61087316565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104e5610585565b846103f0856040518060600160405280602581526020016109b6602591396001600061050f610585565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6107dc16565b6000610363610553610585565b8484610675565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806109926024913960400191505060405180910390fd5b6001600160a01b0382166106135760405162461bcd60e51b81526004018080602001828103825260228152602001806108fd6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106ba5760405162461bcd60e51b815260040180806020018281038252602581526020018061096d6025913960400191505060405180910390fd5b6001600160a01b0382166106ff5760405162461bcd60e51b81526004018080602001828103825260238152602001806108da6023913960400191505060405180910390fd5b61070a8383836108d4565b61074d8160405180606001604052806026815260200161091f602691396001600160a01b038616600090815260208190526040902054919063ffffffff6107dc16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610782908263ffffffff61087316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561086b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610830578181015183820152602001610818565b50505050905090810190601f16801561085d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108cd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d1fbab9eeb253be1ff939623f0def7545dc8a6910e52573f1cf2f9dbe34f79c464736f6c634300060b0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1D9 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x28B JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1BB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH2 0x36C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x3FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x408 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x45C JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x477 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4D8 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x546 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x55A JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x328 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x35C PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F DUP5 DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH2 0x3F5 DUP5 PUSH2 0x38B PUSH2 0x585 JUMP JUMPDEST PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x945 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x3C9 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x415 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x426 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x873 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x4E5 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9B6 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x50F PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x553 PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x992 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x613 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8FD PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6BA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x96D PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8DA PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x70A DUP4 DUP4 DUP4 PUSH2 0x8D4 JUMP JUMPDEST PUSH2 0x74D DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x91F PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x782 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x873 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x86B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x830 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x818 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x85D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220D1FB 0xAB SWAP15 0xEB 0x25 EXTCODESIZE 0xE1 SELFDESTRUCT SWAP4 SWAP7 0x23 CREATE 0xDE 0xF7 SLOAD 0x5D 0xC8 0xA6 SWAP2 0xE MSTORE JUMPI EXTCODEHASH SHR CALLCODE 0xF9 0xDB 0xE3 0x4F PUSH26 0xC464736F6C634300060B00330000000000000000000000000000 ",
              "sourceMap": "35397:9426:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36244:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38280:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38280:166:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;37287:98;;;:::i;:::-;;;;;;;;;;;;;;;;38913:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38913:317:0;;;;;;;;;;;;;;;;;:::i;37146:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39625:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39625:215:0;;;;;;;;:::i;37443:117::-;;;;;;;;;;;;;;;;-1:-1:-1;37443:117:0;-1:-1:-1;;;;;37443:117:0;;:::i;36438:85::-;;;:::i;40327:266::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40327:266:0;;;;;;;;:::i;37763:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37763:172:0;;;;;;;;:::i;37993:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37993:149:0;;;;;;;;;;:::i;36244:81::-;36313:5;36306:12;;;;;;;;-1:-1:-1;;36306:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36281:13;;36306:12;;36313:5;;36306:12;;36313:5;36306:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36244:81;:::o;38280:166::-;38363:4;38379:39;38388:12;:10;:12::i;:::-;38402:7;38411:6;38379:8;:39::i;:::-;-1:-1:-1;38435:4:0;38280:166;;;;:::o;37287:98::-;37366:12;;37287:98;:::o;38913:317::-;39019:4;39035:36;39045:6;39053:9;39064:6;39035:9;:36::i;:::-;39081:121;39090:6;39098:12;:10;:12::i;:::-;39112:89;39150:6;39112:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39112:19:0;;;;;;:11;:19;;;;;;39132:12;:10;:12::i;:::-;-1:-1:-1;;;;;39112:33:0;;;;;;;;;;;;-1:-1:-1;39112:33:0;;;:89;;:37;:89;:::i;:::-;39081:8;:121::i;:::-;-1:-1:-1;39219:4:0;38913:317;;;;;:::o;37146:81::-;37211:9;;;;37146:81;:::o;39625:215::-;39713:4;39729:83;39738:12;:10;:12::i;:::-;39752:7;39761:50;39800:10;39761:11;:25;39773:12;:10;:12::i;:::-;-1:-1:-1;;;;;39761:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;39761:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;37443:117::-;-1:-1:-1;;;;;37535:18:0;37509:7;37535:18;;;;;;;;;;;;37443:117::o;36438:85::-;36509:7;36502:14;;;;;;;;-1:-1:-1;;36502:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36477:13;;36502:14;;36509:7;;36502:14;;36509:7;36502:14;;;;;;;;;;;;;;;;;;;;;;;;40327:266;40420:4;40436:129;40445:12;:10;:12::i;:::-;40459:7;40468:96;40507:15;40468:96;;;;;;;;;;;;;;;;;:11;:25;40480:12;:10;:12::i;:::-;-1:-1:-1;;;;;40468:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;40468:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;37763:172::-;37849:4;37865:42;37875:12;:10;:12::i;:::-;37889:9;37900:6;37865:9;:42::i;37993:149::-;-1:-1:-1;;;;;38108:18:0;;;38082:7;38108:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;37993:149::o;33677:104::-;33764:10;33677:104;:::o;43391:340::-;-1:-1:-1;;;;;43492:19:0;;43484:68;;;;-1:-1:-1;;;43484:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43570:21:0;;43562:68;;;;-1:-1:-1;;;43562:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43641:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;43692:32;;;;;;;;;;;;;;;;;43391:340;;;:::o;41067:530::-;-1:-1:-1;;;;;41172:20:0;;41164:70;;;;-1:-1:-1;;;41164:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41252:23:0;;41244:71;;;;-1:-1:-1;;;41244:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41326:47;41347:6;41355:9;41366:6;41326:20;:47::i;:::-;41404:71;41426:6;41404:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41404:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;41384:17:0;;;:9;:17;;;;;;;;;;;:91;;;;41508:20;;;;;;;:32;;41533:6;41508:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;41485:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;41555:35;;;;;;;41485:20;;41555:35;;;;;;;;;;;;;41067:530;;;:::o;26881:187::-;26967:7;27002:12;26994:6;;;;26986:29;;;;-1:-1:-1;;;26986:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27037:5:0;;;26881:187::o;26009:176::-;26067:7;26098:5;;;26121:6;;;;26113:46;;;;;-1:-1:-1;;;26113:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26177:1;26009:176;-1:-1:-1;;;26009:176:0:o;44729:92::-;;;;:::o"
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          }
        },
        "ExtendedFDT": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IBPool": {
          "abi": [
            {
              "inputs": [],
              "name": "INIT_POOL_SUPPLY",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "MAX_OUT_RATIO",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "bind",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenBalanceOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenWeightOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "poolSupply",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalWeight",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenAmountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "swapFee",
                  "type": "uint256"
                }
              ],
              "name": "calcPoolInGivenSingleOut",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenBalanceOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenWeightOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "poolSupply",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalWeight",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "poolAmountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "swapFee",
                  "type": "uint256"
                }
              ],
              "name": "calcSingleOutGivenPoolIn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenAmountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "maxPoolAmountIn",
                  "type": "uint256"
                }
              ],
              "name": "exitswapExternAmountOut",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "poolAmountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "finalize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "getBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "getDenormalizedWeight",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getFinalTokens",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "getNormalizedWeight",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getNumTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getSwapFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getTotalDenormalizedWeight",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "gulp",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "isBound",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "isFinalized",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "poolAmountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256[]",
                  "name": "maxAmountsIn",
                  "type": "uint256[]"
                }
              ],
              "name": "joinPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "INIT_POOL_SUPPLY()": "9381cd2b",
              "MAX_OUT_RATIO()": "992e2a92",
              "balanceOf(address)": "70a08231",
              "bind(address,uint256,uint256)": "e4e1e538",
              "calcPoolInGivenSingleOut(uint256,uint256,uint256,uint256,uint256,uint256)": "82f652ad",
              "calcSingleOutGivenPoolIn(uint256,uint256,uint256,uint256,uint256,uint256)": "89298012",
              "exitswapExternAmountOut(address,uint256,uint256)": "02c96748",
              "finalize()": "4bb278f3",
              "getBalance(address)": "f8b2cb4f",
              "getDenormalizedWeight(address)": "948d8ce6",
              "getFinalTokens()": "be3bbd2e",
              "getNormalizedWeight(address)": "f1b8a9b7",
              "getNumTokens()": "cd2ed8fb",
              "getSwapFee()": "d4cadf68",
              "getTotalDenormalizedWeight()": "936c3477",
              "gulp(address)": "8c28cbe8",
              "isBound(address)": "2f37b624",
              "isFinalized()": "8d4e4083",
              "joinPool(uint256,uint256[])": "4f69c0d4",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb"
            }
          }
        },
        "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"
            }
          }
        },
        "IDebtLocker": {
          "abi": [
            {
              "inputs": [],
              "name": "claim",
              "outputs": [
                {
                  "internalType": "uint256[7]",
                  "name": "",
                  "type": "uint256[7]"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastAmountRecovered",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastDefaultSuffered",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastExcessReturned",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastFeePaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastInterestPaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastPrincipalPaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "loan",
              "outputs": [
                {
                  "internalType": "contract ILoan",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "triggerDefault",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "claim()": "4e71d92d",
              "lastAmountRecovered()": "f5396d96",
              "lastDefaultSuffered()": "3dedc1b0",
              "lastExcessReturned()": "b2644fbc",
              "lastFeePaid()": "e77601b9",
              "lastInterestPaid()": "2de520d7",
              "lastPrincipalPaid()": "6cb249a6",
              "liquidityAsset()": "209b2bca",
              "loan()": "d285b7b4",
              "pool()": "16f0115b",
              "triggerDefault()": "175f8329"
            }
          }
        },
        "IDebtLockerFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                }
              ],
              "name": "DebtLockerCreated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "factoryType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                }
              ],
              "name": "isLocker",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                }
              ],
              "name": "newLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                }
              ],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryType()": "64e1fd55",
              "isLocker(address)": "2ec63d7c",
              "newLocker(address)": "19eb783a",
              "owner(address)": "666e1b39"
            }
          }
        },
        "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"
            }
          }
        },
        "IERC20Details": {
          "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": "decimals",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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",
              "decimals()": "313ce567",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "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"
            }
          }
        },
        "ILiquidityLocker": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "fundLoan",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "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": "transfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "fundLoan(address,address,uint256)": "1aa37cec",
              "liquidityAsset()": "209b2bca",
              "pool()": "16f0115b",
              "transfer(address,uint256)": "a9059cbb"
            }
          }
        },
        "ILiquidityLockerFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                }
              ],
              "name": "LiquidityLockerCreated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "factoryType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                }
              ],
              "name": "isLocker",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                }
              ],
              "name": "newLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                }
              ],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryType()": "64e1fd55",
              "isLocker(address)": "2ec63d7c",
              "newLocker(address)": "19eb783a",
              "owner(address)": "666e1b39"
            }
          }
        },
        "ILoan": {
          "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": "account",
                  "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": false,
                  "internalType": "uint256",
                  "name": "drawdownAmount",
                  "type": "uint256"
                }
              ],
              "name": "Drawdown",
              "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": "collateralSwapped",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidityAssetReturned",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidationExcess",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "defaultSuffered",
                  "type": "uint256"
                }
              ],
              "name": "Liquidation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loanAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "LoanAdminSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "fundedBy",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amountFunded",
                  "type": "uint256"
                }
              ],
              "name": "LoanFunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "enum ILoan.State",
                  "name": "state",
                  "type": "uint8"
                }
              ],
              "name": "LoanStateChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "totalPaid",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "principalPaid",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "interestPaid",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paymentsRemaining",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "principalOwed",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "nextPaymentDue",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "latePayment",
                  "type": "bool"
                }
              ],
              "name": "PaymentMade",
              "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": [],
              "name": "amountLiquidated",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "amountRecovered",
              "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": [],
              "name": "apr",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "borrower",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "clFactory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "collateralAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "collateralLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "collateralRatio",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "collateralRequiredForDrawdown",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "createdAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "defaultGracePeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "defaultSuffered",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "drawdown",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "excessReturned",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "feePaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "flFactory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "mintTo",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "fundLoan",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundingLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundingPeriod",
              "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": "getExpectedAmountRecovered",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getFullPayment",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "total",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "principal",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "interest",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getNextPayment",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestPaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lateFeeCalc",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidationExcess",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loanAdmin",
                  "type": "address"
                }
              ],
              "name": "loanAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "loanState",
              "outputs": [
                {
                  "internalType": "enum ILoan.State",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "makeFullPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "makePayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "nextPaymentDue",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "paymentIntervalSeconds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "paymentsRemaining",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "premiumCalc",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "principalOwed",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "principalPaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "reclaimERC20",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "repaymentCalc",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "requestAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loanAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setLoanAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "superFactory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "termDays",
              "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": "triggerDefault",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unwind",
              "outputs": [],
              "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",
              "amountLiquidated()": "c9f4e490",
              "amountRecovered()": "39c02899",
              "approve(address,uint256)": "095ea7b3",
              "apr()": "57ded9c9",
              "balanceOf(address)": "70a08231",
              "borrower()": "7df1f1b9",
              "clFactory()": "e74f6166",
              "collateralAsset()": "aabaecd6",
              "collateralLocker()": "09f64d08",
              "collateralRatio()": "b4eae1cb",
              "collateralRequiredForDrawdown(uint256)": "da9bf6e0",
              "createdAt()": "cf09e0d0",
              "defaultGracePeriod()": "705d5f24",
              "defaultSuffered()": "4b27ef6c",
              "drawdown(uint256)": "a079a4dd",
              "excessReturned()": "31a7958f",
              "feePaid()": "ac7c5780",
              "flFactory()": "2c3c1216",
              "fundLoan(address,uint256)": "e920b1e1",
              "fundingLocker()": "743e5d1d",
              "fundingPeriod()": "74d7c62b",
              "fundsToken()": "63f04b15",
              "fundsTokenBalance()": "a9691f3f",
              "getExpectedAmountRecovered()": "c296dcba",
              "getFullPayment()": "77903e3b",
              "getNextPayment()": "4ae01cdc",
              "interestPaid()": "e48671c4",
              "lateFeeCalc()": "5e8bdbeb",
              "liquidationExcess()": "cee96669",
              "liquidityAsset()": "209b2bca",
              "loanAdmins(address)": "4be7cb14",
              "loanState()": "25af34cd",
              "makeFullPayment()": "60bd1f87",
              "makePayment()": "d8d79700",
              "nextPaymentDue()": "b4198570",
              "pause()": "8456cb59",
              "paymentIntervalSeconds()": "f5552788",
              "paymentsRemaining()": "0895326f",
              "premiumCalc()": "757116a0",
              "principalOwed()": "19350114",
              "principalPaid()": "64195ba8",
              "reclaimERC20(address)": "8905fd4f",
              "repaymentCalc()": "06775458",
              "requestAmount()": "f52ec46c",
              "setLoanAdmin(address,bool)": "92769d94",
              "superFactory()": "0d49b38c",
              "termDays()": "469cbfdb",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "triggerDefault()": "175f8329",
              "unpause()": "3f4ba83a",
              "unwind()": "807763ab",
              "updateFundsReceived()": "46c162de",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "ILoanFDT": {
          "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": "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": "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",
              "fundsToken()": "63f04b15",
              "fundsTokenBalance()": "a9691f3f",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "ILoanFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "borrower",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "collateralAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "collateralLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "fundingLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[5]",
                  "name": "specs",
                  "type": "uint256[5]"
                },
                {
                  "indexed": false,
                  "internalType": "address[3]",
                  "name": "calcs",
                  "type": "address[3]"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "name": "LoanCreated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loanFactoryAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "LoanFactoryAdminSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "CL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "FL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "INTEREST_CALC_TYPE",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "LATEFEE_CALC_TYPE",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "PREMIUM_CALC_TYPE",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "collateralAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "flFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "clFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256[5]",
                  "name": "specs",
                  "type": "uint256[5]"
                },
                {
                  "internalType": "address[3]",
                  "name": "calcs",
                  "type": "address[3]"
                }
              ],
              "name": "createLoan",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "globals",
              "outputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                }
              ],
              "name": "isLoan",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "admin",
                  "type": "address"
                }
              ],
              "name": "loanFactoryAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "loans",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "loansCreated",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newGlobals",
                  "type": "address"
                }
              ],
              "name": "setGlobals",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loanFactoryAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setLoanFactoryAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "CL_FACTORY()": "e70dd6cf",
              "FL_FACTORY()": "38505fb0",
              "INTEREST_CALC_TYPE()": "8c38922f",
              "LATEFEE_CALC_TYPE()": "3493f4ca",
              "PREMIUM_CALC_TYPE()": "7a8fe3c0",
              "createLoan(address,address,address,address,uint256[5],address[3])": "d5ab2074",
              "globals()": "c3124525",
              "isLoan(address)": "2819cbc2",
              "loanFactoryAdmins(address)": "a620e0ac",
              "loans(uint256)": "e1ec3c68",
              "loansCreated()": "ee9b75b5",
              "pause()": "8456cb59",
              "setGlobals(address)": "cc2e0a26",
              "setLoanFactoryAdmin(address,bool)": "2cd0aca0",
              "unpause()": "3f4ba83a"
            }
          }
        },
        "IMapleGlobals": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "balancerPool",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "BalancerPoolSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "decimals",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "CollateralAssetSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newGlobalAdmin",
                  "type": "address"
                }
              ],
              "name": "GlobalAdminSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "bytes32",
                  "name": "which",
                  "type": "bytes32"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "addr",
                  "type": "address"
                }
              ],
              "name": "GlobalsAddressSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "bytes32",
                  "name": "which",
                  "type": "bytes32"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "GlobalsParamSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "governor",
                  "type": "address"
                }
              ],
              "name": "GovernorAccepted",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [],
              "name": "Initialized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "decimals",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "LiquidityAssetSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "oracle",
                  "type": "address"
                }
              ],
              "name": "OracleSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingGovernor",
                  "type": "address"
                }
              ],
              "name": "PendingGovernorSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "poolDelegate",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "PoolDelegateSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "pause",
                  "type": "bool"
                }
              ],
              "name": "ProtocolPaused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "exemptedContract",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "TransferRestrictionExemptionSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernor",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "defaultGracePeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "name": "defaultUniswapPath",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundingPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                }
              ],
              "name": "getLatestPrice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getLpCooldownParams",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "globalAdmin",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governor",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "investorFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "balancerPool",
                  "type": "address"
                }
              ],
              "name": "isValidBalancerPool",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "calc",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "calcType",
                  "type": "uint8"
                }
              ],
              "name": "isValidCalc",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "collateralAsset",
                  "type": "address"
                }
              ],
              "name": "isValidCollateralAsset",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                }
              ],
              "name": "isValidLiquidityAsset",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loanFactory",
                  "type": "address"
                }
              ],
              "name": "isValidLoanFactory",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolDelegate",
                  "type": "address"
                }
              ],
              "name": "isValidPoolDelegate",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolFactory",
                  "type": "address"
                }
              ],
              "name": "isValidPoolFactory",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "superFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "subFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "factoryType",
                  "type": "uint8"
                }
              ],
              "name": "isValidSubFactory",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lpCooldownPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lpWithdrawWindow",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "mapleTreasury",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxSwapSlippage",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "minLoanEquity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "mpl",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                }
              ],
              "name": "oracleFor",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernor",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "protocolPaused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "calc",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setCalc",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setCollateralAsset",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_defaultGracePeriod",
                  "type": "uint256"
                }
              ],
              "name": "setDefaultGracePeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "mid",
                  "type": "address"
                }
              ],
              "name": "setDefaultUniswapPath",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fundingPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setFundingPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newGlobalAdmin",
                  "type": "address"
                }
              ],
              "name": "setGlobalAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setInvestorFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setLiquidityAsset",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newCooldownPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setLpCooldownPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLpWithdrawWindow",
                  "type": "uint256"
                }
              ],
              "name": "setLpWithdrawWindow",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_mapleTreasury",
                  "type": "address"
                }
              ],
              "name": "setMapleTreasury",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newMaxSlippage",
                  "type": "uint256"
                }
              ],
              "name": "setMaxSwapSlippage",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_minLoanEquity",
                  "type": "uint256"
                }
              ],
              "name": "setMinLoanEquity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pendingGovernor",
                  "type": "address"
                }
              ],
              "name": "setPendingGovernor",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolDelegate",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setPoolDelegateAllowlist",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "oracle",
                  "type": "address"
                }
              ],
              "name": "setPriceOracle",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bool",
                  "name": "pause",
                  "type": "bool"
                }
              ],
              "name": "setProtocolPause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newCooldownPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setStakerCooldownPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newUnstakeWindow",
                  "type": "uint256"
                }
              ],
              "name": "setStakerUnstakeWindow",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "setSwapOutRequired",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setTreasuryFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "balancerPool",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setValidBalancerPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loanFactory",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setValidLoanFactory",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolFactory",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setValidPoolFactory",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "superFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "subFactory",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setValidSubFactory",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakerCooldownPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakerUnstakeWindow",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "swapOutRequired",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "treasuryFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "calc",
                  "type": "address"
                }
              ],
              "name": "validCalcs",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "superFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "subFactory",
                  "type": "address"
                }
              ],
              "name": "validSubFactories",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "acceptGovernor()": "e58bb639",
              "defaultGracePeriod()": "705d5f24",
              "defaultUniswapPath(address,address)": "4d866592",
              "fundingPeriod()": "74d7c62b",
              "getLatestPrice(address)": "16345f18",
              "getLpCooldownParams()": "9f51290b",
              "globalAdmin()": "ec9a9368",
              "governor()": "0c340a24",
              "investorFee()": "16a12d7a",
              "isValidBalancerPool(address)": "72a22d71",
              "isValidCalc(address,uint8)": "1b5833f7",
              "isValidCollateralAsset(address)": "8c14834b",
              "isValidLiquidityAsset(address)": "8695118a",
              "isValidLoanFactory(address)": "b53afda7",
              "isValidPoolDelegate(address)": "372e3546",
              "isValidPoolFactory(address)": "107c0240",
              "isValidSubFactory(address,address,uint8)": "13d459fb",
              "lpCooldownPeriod()": "dd02e0ec",
              "lpWithdrawWindow()": "df3d02bd",
              "mapleTreasury()": "a5a27605",
              "maxSwapSlippage()": "55323195",
              "minLoanEquity()": "4a2697c4",
              "mpl()": "a0530946",
              "oracleFor(address)": "aed019b9",
              "pendingGovernor()": "e3056a34",
              "protocolPaused()": "425fad58",
              "setCalc(address,bool)": "be44ed6b",
              "setCollateralAsset(address,bool)": "2fa6c88f",
              "setDefaultGracePeriod(uint256)": "44c14f71",
              "setDefaultUniswapPath(address,address,address)": "f3897663",
              "setFundingPeriod(uint256)": "2a5aa292",
              "setGlobalAdmin(address)": "c52bc31d",
              "setInvestorFee(uint256)": "5e045467",
              "setLiquidityAsset(address,bool)": "2daa0d89",
              "setLpCooldownPeriod(uint256)": "8608a6e1",
              "setLpWithdrawWindow(uint256)": "26718606",
              "setMapleTreasury(address)": "7303de25",
              "setMaxSwapSlippage(uint256)": "f33ef09a",
              "setMinLoanEquity(uint256)": "298b795d",
              "setPendingGovernor(address)": "f235757f",
              "setPoolDelegateAllowlist(address,bool)": "efdb16fc",
              "setPriceOracle(address,address)": "67a74ddc",
              "setProtocolPause(bool)": "4e989118",
              "setStakerCooldownPeriod(uint256)": "fd4a9121",
              "setStakerUnstakeWindow(uint256)": "d1cdf301",
              "setSwapOutRequired(uint256)": "dbc6c552",
              "setTreasuryFee(uint256)": "77e741c7",
              "setValidBalancerPool(address,bool)": "490dae64",
              "setValidLoanFactory(address,bool)": "c9c67240",
              "setValidPoolFactory(address,bool)": "6597b899",
              "setValidSubFactory(address,address,bool)": "f85ee6f8",
              "stakerCooldownPeriod()": "a965d6b5",
              "stakerUnstakeWindow()": "2018b870",
              "swapOutRequired()": "3106374c",
              "treasuryFee()": "cc32d176",
              "validCalcs(address)": "1beb84e7",
              "validSubFactories(address,address)": "1b1804aa"
            }
          }
        },
        "IPool": {
          "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": "liquidityProvider",
                  "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": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "interest",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "principal",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fee",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "stakeLockerPortion",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "poolDelegatePortion",
                  "type": "uint256"
                }
              ],
              "name": "Claim",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "cooldown",
                  "type": "uint256"
                }
              ],
              "name": "Cooldown",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "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": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "defaultSuffered",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "bptsBurned",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "bptsReturned",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidityAssetRecoveredFromBurn",
                  "type": "uint256"
                }
              ],
              "name": "DefaultSuffered",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "depositDate",
                  "type": "uint256"
                }
              ],
              "name": "DepositDateUpdated",
              "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": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "LPStatusChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newLiquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCapSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amountFunded",
                  "type": "uint256"
                }
              ],
              "name": "LoanFunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newLockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "LockupPeriodSet",
              "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": "poolAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "PoolAdminSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "isOpen",
                  "type": "bool"
                }
              ],
              "name": "PoolOpenedToPublic",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "enum IPool.State",
                  "name": "state",
                  "type": "uint8"
                }
              ],
              "name": "PoolStateChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newStakingFee",
                  "type": "uint256"
                }
              ],
              "name": "StakingFeeSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "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"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_stakeLocker",
                  "type": "address"
                }
              ],
              "name": "BPTVal",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "DL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "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": "liquidityProvider",
                  "type": "address"
                }
              ],
              "name": "allowedLiquidityProviders",
              "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": "cancelWithdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                }
              ],
              "name": "claim",
              "outputs": [
                {
                  "internalType": "uint256[7]",
                  "name": "claimInfo",
                  "type": "uint256[7]"
                }
              ],
              "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": "deactivate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "debtLockerFactory",
                  "type": "address"
                }
              ],
              "name": "debtLockers",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "delegateFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "deposit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "depositDate",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "finalize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "fundLoan",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getInitialStakeRequirements",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_stakeLocker",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_liquidityAssetAmountRequired",
                  "type": "uint256"
                }
              ],
              "name": "getPoolSharesRequired",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "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": "intendToWithdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestSum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "depositAmt",
                  "type": "uint256"
                }
              ],
              "name": "isDepositAllowed",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "isPoolFinalized",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityCap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "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": "openToPublic",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolAdmin",
                  "type": "address"
                }
              ],
              "name": "poolAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolDelegate",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolLosses",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolState",
              "outputs": [
                {
                  "internalType": "enum IPool.State",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "principalOut",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "reclaimERC20",
              "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": "account",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "setAllowList",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLiquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityCap",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setLockupPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bool",
                  "name": "open",
                  "type": "bool"
                }
              ],
              "name": "setOpenToPublic",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setPoolAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newStakingFee",
                  "type": "uint256"
                }
              ],
              "name": "setStakingFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakeAsset",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakeLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakingFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "superFactory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "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": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                }
              ],
              "name": "triggerDefault",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateLossesReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                }
              ],
              "name": "withdrawCooldown",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "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": {
              "BPTVal(address,address,address,address)": "681cb10a",
              "DL_FACTORY()": "174a5be4",
              "accumulativeFundsOf(address)": "4e97415f",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "allowedLiquidityProviders(address)": "c59e3959",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "cancelWithdraw()": "84b76824",
              "claim(address,address)": "21c0b342",
              "custodyAllowance(address,address)": "c965b548",
              "deactivate()": "51b42b00",
              "debtLockers(address,address)": "d7bd3c91",
              "delegateFee()": "b69410de",
              "deposit(uint256)": "b6b55f25",
              "depositDate(address)": "24b92e8e",
              "finalize()": "4bb278f3",
              "fundLoan(address,address,uint256)": "1aa37cec",
              "getInitialStakeRequirements()": "13bf9e7e",
              "getPoolSharesRequired(address,address,address,address,uint256)": "c3746825",
              "increaseCustodyAllowance(address,uint256)": "27f91856",
              "intendToWithdraw()": "73ef9a50",
              "interestBalance()": "9f3c7325",
              "interestSum()": "71073bac",
              "isDepositAllowed(uint256)": "80e7ce85",
              "isPoolFinalized()": "4f85221a",
              "liquidityAsset()": "209b2bca",
              "liquidityCap()": "76687d3d",
              "liquidityLocker()": "9759164a",
              "lockupPeriod()": "ee947a7c",
              "lossesBalance()": "fec984e3",
              "openToPublic()": "1831ccf2",
              "poolAdmins(address)": "613384f2",
              "poolDelegate()": "4046af2b",
              "poolLosses()": "a33142f7",
              "poolState()": "641ad8a9",
              "principalOut()": "ac641655",
              "reclaimERC20(address)": "8905fd4f",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "setAllowList(address,bool)": "7666f125",
              "setLiquidityCap(uint256)": "7b99adb1",
              "setLockupPeriod(uint256)": "c771c390",
              "setOpenToPublic(bool)": "a43baa3d",
              "setPoolAdmin(address,bool)": "9185192a",
              "setStakingFee(uint256)": "410dbf7e",
              "stakeAsset()": "80cd916d",
              "stakeLocker()": "033b1cf0",
              "stakingFee()": "eff98843",
              "superFactory()": "0d49b38c",
              "totalCustodyAllowance(address)": "af6d5571",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferByCustodian(address,address,uint256)": "2ac04ac8",
              "transferFrom(address,address,uint256)": "23b872dd",
              "triggerDefault(address,address)": "40504ba0",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdraw(uint256)": "2e1a7d4d",
              "withdrawCooldown(address)": "d82745c8",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IPoolFDT": {
          "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": "interestBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestSum",
              "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": "poolLosses",
              "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",
              "interestBalance()": "9f3c7325",
              "interestSum()": "71073bac",
              "lossesBalance()": "fec984e3",
              "poolLosses()": "a33142f7",
              "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"
            }
          }
        },
        "IPoolFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "delegate",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "stakingFee",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "delegateFee",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidityCap",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "name": "PoolCreated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "poolFactoryAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "PoolFactoryAdminSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "LL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "SL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "slFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "llFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "stakingFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "delegateFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "liquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "createPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "poolAddress",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "globals",
              "outputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                }
              ],
              "name": "isPool",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolFactoryAdmin",
                  "type": "address"
                }
              ],
              "name": "poolFactoryAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "pools",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolsCreated",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newGlobals",
                  "type": "address"
                }
              ],
              "name": "setGlobals",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolFactoryAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setPoolFactoryAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "LL_FACTORY()": "c5ba73ed",
              "SL_FACTORY()": "9f71f14a",
              "createPool(address,address,address,address,uint256,uint256,uint256)": "312b8982",
              "globals()": "c3124525",
              "isPool(address)": "5b16ebb7",
              "pause()": "8456cb59",
              "poolFactoryAdmins(address)": "6050abb2",
              "pools(uint256)": "ac4afa38",
              "poolsCreated()": "945164e7",
              "setGlobals(address)": "cc2e0a26",
              "setPoolFactoryAdmin(address,bool)": "f3f616c0",
              "unpause()": "3f4ba83a"
            }
          }
        },
        "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"
            }
          }
        },
        "IStakeLockerFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "name": "StakeLockerCreated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "factoryType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "isLocker",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                }
              ],
              "name": "newLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryType()": "64e1fd55",
              "isLocker(address)": "2ec63d7c",
              "newLocker(address,address)": "85de067e",
              "owner(address)": "666e1b39"
            }
          }
        },
        "ISubFactory": {
          "abi": [
            {
              "inputs": [],
              "name": "factoryType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryType()": "64e1fd55"
            }
          }
        },
        "Pool": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_poolDelegate",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_stakeAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_slFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_llFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_stakingFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_delegateFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_liquidityCap",
                  "type": "uint256"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": "liquidityProvider",
                  "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": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "interest",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "principal",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fee",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "stakeLockerPortion",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "poolDelegatePortion",
                  "type": "uint256"
                }
              ],
              "name": "Claim",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "cooldown",
                  "type": "uint256"
                }
              ],
              "name": "Cooldown",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "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": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "defaultSuffered",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "bptsBurned",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "bptsReturned",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidityAssetRecoveredFromBurn",
                  "type": "uint256"
                }
              ],
              "name": "DefaultSuffered",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "depositDate",
                  "type": "uint256"
                }
              ],
              "name": "DepositDateUpdated",
              "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": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "LPStatusChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newLiquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCapSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amountFunded",
                  "type": "uint256"
                }
              ],
              "name": "LoanFunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newLockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "LockupPeriodSet",
              "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": "poolAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "PoolAdminSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "isOpen",
                  "type": "bool"
                }
              ],
              "name": "PoolOpenedToPublic",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "enum IPool.State",
                  "name": "state",
                  "type": "uint8"
                }
              ],
              "name": "PoolStateChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newStakingFee",
                  "type": "uint256"
                }
              ],
              "name": "StakingFeeSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "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"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_stakeLocker",
                  "type": "address"
                }
              ],
              "name": "BPTVal",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "DL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "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": "",
                  "type": "address"
                }
              ],
              "name": "allowedLiquidityProviders",
              "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": "cancelWithdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                }
              ],
              "name": "claim",
              "outputs": [
                {
                  "internalType": "uint256[7]",
                  "name": "claimInfo",
                  "type": "uint256[7]"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "custodyAllowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "deactivate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "debtLockers",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "delegateFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "deposit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "depositDate",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "finalize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "fundLoan",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getInitialStakeRequirements",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_stakeLocker",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_liquidityAssetAmountRequired",
                  "type": "uint256"
                }
              ],
              "name": "getPoolSharesRequired",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "increaseCustodyAllowance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "intendToWithdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestSum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "depositAmt",
                  "type": "uint256"
                }
              ],
              "name": "isDepositAllowed",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "isPoolFinalized",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityCap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityLocker",
              "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": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "openToPublic",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "poolAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolDelegate",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolLosses",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolState",
              "outputs": [
                {
                  "internalType": "enum IPool.State",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "principalOut",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "reclaimERC20",
              "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": "account",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "setAllowList",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLiquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityCap",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setLockupPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bool",
                  "name": "open",
                  "type": "bool"
                }
              ],
              "name": "setOpenToPublic",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setPoolAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newStakingFee",
                  "type": "uint256"
                }
              ],
              "name": "setStakingFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakeAsset",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakeLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakingFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "superFactory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "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": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                }
              ],
              "name": "triggerDefault",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateLossesReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "withdrawCooldown",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "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": {
                "contracts/core/pool/v1/Pool.sol": {
                  "PoolLib": [
                    {
                      "length": 20,
                      "start": 545
                    },
                    {
                      "length": 20,
                      "start": 5329
                    },
                    {
                      "length": 20,
                      "start": 5901
                    },
                    {
                      "length": 20,
                      "start": 6241
                    },
                    {
                      "length": 20,
                      "start": 7612
                    },
                    {
                      "length": 20,
                      "start": 8040
                    },
                    {
                      "length": 20,
                      "start": 9722
                    },
                    {
                      "length": 20,
                      "start": 10180
                    },
                    {
                      "length": 20,
                      "start": 10936
                    },
                    {
                      "length": 20,
                      "start": 12075
                    },
                    {
                      "length": 20,
                      "start": 13802
                    }
                  ]
                }
              },
              "object": "6101806040523480156200001257600080fd5b50604051620050433803806200504383398181016040526101408110156200003957600080fd5b815160208301516040808501516060860151608087015160a088015160c089015160e08a01516101008b0180519751999b989a969995989497939692959194919392820192846401000000008211156200009257600080fd5b908301906020820185811115620000a857600080fd5b8251640100000000811182820188101715620000c357600080fd5b82525081516020918201929091019080838360005b83811015620000f2578181015183820152602001620000d8565b50505050905090810190601f168015620001205780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200014457600080fd5b9083019060208201858111156200015a57600080fd5b82516401000000008111828201881017156200017557600080fd5b82525081516020918201929091019080838360005b83811015620001a45781810151838201526020016200018a565b50505050905090810190601f168015620001d25780820380516001836020036101000a031916815260200191505b5060405250505081818181818181818160039080519060200190620001f99291906200056e565b5080516200020f9060049060208401906200056e565b50506005805460ff191660121790555073__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__955063149851689450620002589350339250506001600160e01b03620004fe169050565b604080516001600160e01b031960e085901b1681526001600160a01b039283166004820152828e166024820152918c16604483015260648201899052608482018890525160a4808301926000929190829003018186803b158015620002bc57600080fd5b505af4158015620002d1573d6000803e3d6000fd5b50505050886001600160a01b03166080816001600160a01b031660601b81525050886001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032c57600080fd5b505afa15801562000341573d6000803e3d6000fd5b505050506040513d60208110156200035857600080fd5b505160ff1661014052606088811b6001600160601b031990811660e0528b821b1660a052601086905561016085905233901b610120526012839055604080516342ef033f60e11b81526001600160a01b03808b1660048301528b811660248301529151918916916385de067e916044808201926020929091908290030181600087803b158015620003e857600080fd5b505af1158015620003fd573d6000803e3d6000fd5b505050506040513d60208110156200041457600080fd5b505160601b6001600160601b0319166101005260408051630cf5bc1d60e11b81526001600160a01b038b811660048301529151918816916319eb783a916024808201926020929091908290030181600087803b1580156200047457600080fd5b505af115801562000489573d6000803e3d6000fd5b505050506040513d6020811015620004a057600080fd5b505160601b6001600160601b03191660c05262ed4e00601355604080516000815290517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a916020908290030190a15050505050505050505062000613565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b1580156200053a57600080fd5b505afa1580156200054f573d6000803e3d6000fd5b505050506040513d60208110156200056657600080fd5b505192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005b157805160ff1916838001178555620005e1565b82800160010185558215620005e1579182015b82811115620005e1578251825591602001919060010190620005c4565b50620005ef929150620005f3565b5090565b6200061091905b80821115620005ef5760008155600101620005fa565b90565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c61014051610160516148fd62000746600039806111395280611c695280612644525080613397525080610d5f5280610da85280610f5f52806119ae5280611ed152806123b15280612c755280613020525080610c875280610e6b528061127752806112f2528061139f52806114195280612e45525080610df3528061225f5280612e6d525080610f8752806112a1528061251052806127285280612c0c5280612f7552806132ac5280613805525080610e43528061124d5280611b4c5280612d4b5280613b28525080610e1b5280611027528061137552806113ea5280611efa528061238d52806127055280612be25280612dd95280612e1d5280612f5352806137d652506148fd6000f3fe608060405234801561001057600080fd5b50600436106103fb5760003560e01c806370a0823111610215578063a9059cbb11610125578063c771c390116100b8578063d82745c811610087578063d82745c814610bfa578063dd62ed3e14610c20578063ee947a7c14610c4e578063eff9884314610c56578063fec984e314610c5e576103fb565b8063c771c39014610b79578063c965b54814610b96578063cc0fef0214610bc4578063d7bd3c9114610bcc576103fb565b8063b69410de116100f4578063b69410de14610acf578063b6b55f2514610ad7578063c374682514610af4578063c59e395914610b53576103fb565b8063a9059cbb14610a4f578063ac64165514610a7b578063aed4966a14610a83578063af6d557114610aa9576103fb565b806384b76824116101a85780639759164a116101775780639759164a146109ec5780639f3c7325146109f4578063a33142f7146109fc578063a43baa3d14610a04578063a457c2d714610a23576103fb565b806384b76824146109885780638905fd4f146109905780639185192a146109b657806395d89b41146109e4576103fb565b806376687d3d116101e457806376687d3d1461093e5780637b99adb11461094657806380cd916d1461096357806380e7ce851461096b576103fb565b806370a08231146108da57806371073bac1461090057806373ef9a50146109085780637666f12514610910576103fb565b80632e1a7d4d1161031057806346c162de116102a357806351b42b001161027257806351b42b001461081c578063613384f214610824578063641ad8a91461084a5780636696779114610876578063681cb10a1461089c576103fb565b806346c162de146107de5780634bb278f3146107e65780634e97415f146107ee5780634f85221a14610814576103fb565b806340504ba0116102df57806340504ba01461074757806340bde09814610775578063410dbf7e1461079b578063443bb293146107b8576103fb565b80632e1a7d4d146106ee578063313ce5671461070b57806339509351146107135780634046af2b1461073f576103fb565b80631831ccf21161039357806323b872dd1161036257806323b872dd1461062857806324600fc31461065e57806324b92e8e1461066657806327f918561461068c5780632ac04ac8146106b8576103fb565b80631831ccf21461057a5780631aa37cec14610582578063209b2bca146105ba57806321c0b342146105c2576103fb565b80630d49b38c116103cf5780630d49b38c1461051957806313bf9e7e14610521578063174a5be41461055457806318160ddd14610572576103fb565b806241c52c14610400578063033b1cf01461043857806306fdde031461045c578063095ea7b3146104d9575b600080fd5b6104266004803603602081101561041657600080fd5b50356001600160a01b0316610c66565b60408051918252519081900360200190f35b610440610c85565b604080516001600160a01b039092168252519081900360200190f35b610464610ca9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049e578181015183820152602001610486565b50505050905090810190601f1680156104cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610505600480360360408110156104ef57600080fd5b506001600160a01b038135169060200135610d3f565b604080519115158252519081900360200190f35b610440610d5d565b610529610d81565b6040805195865260208601949094529115158484015260608401526080830152519081900360a00190f35b61055c610f04565b6040805160ff9092168252519081900360200190f35b610426610f09565b610505610f0f565b6105b86004803603606081101561059857600080fd5b506001600160a01b03813581169160208101359091169060400135610f18565b005b610440611025565b6105f0600480360360408110156105d857600080fd5b506001600160a01b0381358116916020013516611049565b604051808260e080838360005b838110156106155781810151838201526020016105fd565b5050505090500191505060405180910390f35b6105056004803603606081101561063e57600080fd5b506001600160a01b03813581169160208101359091169060400135611525565b6105b86115b3565b6104266004803603602081101561067c57600080fd5b50356001600160a01b0316611607565b6105b8600480360360408110156106a257600080fd5b506001600160a01b038135169060200135611619565b6105b8600480360360608110156106ce57600080fd5b506001600160a01b038135811691602081013590911690604001356117ba565b6105b86004803603602081101561070457600080fd5b5035611991565b61055c611aed565b6105056004803603604081101561072957600080fd5b506001600160a01b038135169060200135611af6565b610440611b4a565b6105b86004803603604081101561075d57600080fd5b506001600160a01b0381358116916020013516611b6e565b6104266004803603602081101561078b57600080fd5b50356001600160a01b0316611bef565b6105b8600480360360208110156107b157600080fd5b5035611c58565b610426600480360360208110156107ce57600080fd5b50356001600160a01b0316611d0d565b6105b8611d3f565b6105b8611d6d565b6104266004803603602081101561080457600080fd5b50356001600160a01b0316611e3b565b610505611e80565b6105b8611ea0565b6105056004803603602081101561083a57600080fd5b50356001600160a01b0316611ff9565b61085261200e565b6040518082600281111561086257fe5b60ff16815260200191505060405180910390f35b6104266004803603602081101561088c57600080fd5b50356001600160a01b031661201c565b610426600480360360808110156108b257600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516612042565b610426600480360360208110156108f057600080fd5b50356001600160a01b03166120ed565b610426612108565b6105b861210e565b6105b86004803603604081101561092657600080fd5b506001600160a01b03813516906020013515156121a4565b61042661220c565b6105b86004803603602081101561095c57600080fd5b5035612212565b61044061225d565b6105056004803603602081101561098157600080fd5b5035612281565b6105b86122d4565b6105b8600480360360208110156109a657600080fd5b50356001600160a01b0316612370565b6105b8600480360360408110156109cc57600080fd5b506001600160a01b0381351690602001351515612445565b6104646124ad565b61044061250e565b610426612532565b610426612538565b6105b860048036036020811015610a1a57600080fd5b5035151561253e565b61050560048036036040811015610a3957600080fd5b506001600160a01b03813516906020013561258d565b61050560048036036040811015610a6557600080fd5b506001600160a01b0381351690602001356125fb565b61042661260f565b61042660048036036020811015610a9957600080fd5b50356001600160a01b0316612615565b61042660048036036020811015610abf57600080fd5b50356001600160a01b0316612630565b610426612642565b6105b860048036036020811015610aed57600080fd5b5035612666565b610b3a600480360360a0811015610b0a57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013590911690608001356127a0565b6040805192835260208301919091528051918290030190f35b61050560048036036020811015610b6957600080fd5b50356001600160a01b031661285d565b6105b860048036036020811015610b8f57600080fd5b5035612872565b61042660048036036040811015610bac57600080fd5b506001600160a01b03813581169160200135166128fa565b6105b8612917565b61044060048036036040811015610be257600080fd5b506001600160a01b0381358116916020013516612942565b61042660048036036020811015610c1057600080fd5b50356001600160a01b0316612968565b61042660048036036040811015610c3657600080fd5b506001600160a01b038135811691602001351661297a565b6104266129a5565b6104266129ab565b6104266129b1565b6001600160a01b0381166000908152600860205260409020545b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b6000610d53610d4c6129b7565b84846129bb565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080600073__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__63767f5038610dcc7f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6040805160e084901b6001600160e01b03191681526001600160a01b0392831660048201527f0000000000000000000000000000000000000000000000000000000000000000831660248201527f0000000000000000000000000000000000000000000000000000000000000000831660448201527f0000000000000000000000000000000000000000000000000000000000000000831660648201527f000000000000000000000000000000000000000000000000000000000000000090921660848301525160a48083019260a0929190829003018186803b158015610eb257600080fd5b505af4158015610ec6573d6000803e3d6000fd5b505050506040513d60a0811015610edc57600080fd5b5080516020820151604083015160608401516080909401519299919850965091945092509050565b600181565b60025490565b60145460ff1681565b610f20612b14565b610f2a6001612b24565b601154610f3d908263ffffffff612b8616565b6011556040805163fbecb17160e01b8152601660048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015280861660648301528416608482015260a48101839052905173__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__9163fbecb1719160c4808301926000929190829003018186803b15801561100057600080fd5b505af4158015611014573d6000803e3d6000fd5b50505050611020612be0565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6110516146af565b611059612c70565b611061612d40565b6001600160a01b0380841660009081526016602090815260408083208685168452909152808220548151634e71d92d60e01b81529151931692634e71d92d9260048084019360e093929083900390910190829087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060e08110156110fc57600080fd5b50601054604051633faa6c5d60e01b815291925060009182918291829173__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__91633faa6c5d9188917f00000000000000000000000000000000000000000000000000000000000000009190600401808460e08083838c5b8381101561117e578181015183820152602001611166565b50505050905001838152602001828152602001935050505060806040518083038186803b1580156111ae57600080fd5b505af41580156111c2573d6000803e3d6000fd5b505050506040513d60808110156111d857600080fd5b50805160208201516040830151606090930151601154929750909550919350909150821161120e57601180548390039055611232565b601154611224908290840363ffffffff612b8616565b601180546000909155925090505b600c54611245908263ffffffff612b8616565b600c556112727f000000000000000000000000000000000000000000000000000000000000000085612dcc565b61129c7f000000000000000000000000000000000000000000000000000000000000000084612dcc565b6112d57f00000000000000000000000000000000000000000000000000000000000000006112d0848463ffffffff612b8616565b612dcc565b60c0850151156112f0576112f0878660066020020151612e06565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346c162de6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561134b57600080fd5b505af115801561135f573d6000803e3d6000fd5b5050505061136b611d3f565b611373612be0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561147e57600080fd5b505afa158015611492573d6000803e3d6000fd5b505050506040513d60208110156114a857600080fd5b505160408051918252519081900360200190a36060808601516040805184815260208101869052808201929092529181018590526080810186905290516001600160a01b038916917f21280d282ce6aa29c649fd1825373d7c77892fac3f1958fd98d5ca52dd82a197919081900360a00190a25050505092915050565b6000611532848484613010565b6115a88461153e6129b7565b6115a3856040518060600160405280602881526020016147c3602891396001600160a01b038a1660009081526001602052604081209061157c6129b7565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61318e16565b6129bb565b5060015b9392505050565b6115bb612c70565b60006115c5613225565b9050806115d25750611605565b6115dc33826132aa565b6115e4612be0565b600c546115f7908263ffffffff61332a16565b600c5561160261336c565b50505b565b60156020526000908152604090205481565b336000908152601a602090815260408083206001600160a01b03861684529091528120549061164e828463ffffffff612b8616565b336000908152601b602052604081205491925090611672908563ffffffff612b8616565b905073__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__63297e7bf786868461169a336120ed565b6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184815260200183815260200182815260200194505050505060006040518083038186803b1580156116f557600080fd5b505af4158015611709573d6000803e3d6000fd5b5050336000818152601a602090815260408083206001600160a01b038c16808552908352818420899055848452601b835292819020879055805189815291820188905280519295509293507f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e892908290030190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a25050505050565b6001600160a01b0383166000908152601a60209081526040808320338452909152812054906117ef828463ffffffff61332a16565b60408051631b4c903160e01b81526001600160a01b0380891660048301528716602482015260448101869052905191925073__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__91631b4c903191606480820192600092909190829003018186803b15801561185c57600080fd5b505af4158015611870573d6000803e3d6000fd5b505050506001600160a01b0385166000818152601a602090815260408083203384528252808320859055928252601b9052908120546118af908561332a565b6001600160a01b038088166000818152601b60209081526040918290208590558151898152915194955092891693919233927ffaa022ea2cd7f14157070896fabadafe96cc4d4714eef7ae6a992a5084493ed59281900390910190a46040805184815260208101849052815133926001600160a01b038a16927f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e8929081900390910190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a2505050505050565b611999612c70565b60006119a482613390565b90506000806119d27f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a0957600080fd5b505afa158015611a1d573d6000803e3d6000fd5b505050506040513d6040811015611a3357600080fd5b5080516020909101519092509050611a4b33846133dd565b3360009081526019602052604090205482014203811015611aac576040805162461bcd60e51b8152602060048201526016602482015275140e95d2551211149055d7d393d517d0531313d5d15160521b604482015290519081900360640190fd5b611ab633846134bc565b611abe6115b3565b611adf33611ada611acd613563565b879063ffffffff61332a16565b6132aa565b611ae7612be0565b50505050565b60055460ff1690565b6000610d53611b036129b7565b846115a38560016000611b146129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612b8616565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b76612b14565b6001600160a01b038083166000908152601660209081526040808320858516845290915280822054815163175f832960e01b8152915193169263175f83299260048084019391929182900301818387803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050505050565b6001600160a01b0381166000908152600a6020526040812054600160801b90611c4a90611c4590611c39611c34611c25886120ed565b6009549063ffffffff61359216565b6135eb565b9063ffffffff61362c16565b613691565b81611c5157fe5b0492915050565b611c60612b14565b612710611c93827f000000000000000000000000000000000000000000000000000000000000000063ffffffff612b8616565b1115611cd2576040805162461bcd60e51b8152602060048201526009602482015268503a4241445f46454560b81b604482015290519081900360640190fd5b60108190556040805182815290517f9408bb8c08d29b335e36090045074610352365476d9df02e203c25db4fcd67c09181900360200190a150565b6001600160a01b038116600090815260086020526040812054610d5790611d3384611e3b565b9063ffffffff61332a16565b6000611d4961336c565b905060008113611d595750611605565b611d6a611d6582613691565b6136d2565b50565b611d75612b14565b611d7f6000612b24565b6000611d89610d81565b50509250505080611dd1576040805162461bcd60e51b815260206004820152600d60248201526c503a494e5355465f5354414b4560981b604482015290519081900360640190fd5b601480546001919061ff0019166101008302179055506014546040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a91610100900460ff169080826002811115611e2557fe5b60ff16815260200191505060405180910390a150565b6001600160a01b038116600090815260076020526040812054600160801b90611c4a90611c4590611c39611c34611e71886120ed565b6006549063ffffffff61359216565b60006001601454610100900460ff166002811115611e9a57fe5b14905090565b611ea8612b14565b611eb26001612b24565b73__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__63abbedb40611ef57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6011547f00000000000000000000000000000000000000000000000000000000000000006040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b03168152602001935050505060006040518083038186803b158015611f7f57600080fd5b505af4158015611f93573d6000803e3d6000fd5b50506014805461ff00191661020017908190556040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a935061010090910460ff16915080826002811115611fe457fe5b60ff16815260200191505060405180910390a1565b60176020526000908152604090205460ff1681565b601454610100900460ff1681565b6001600160a01b0381166000908152600b6020526040812054610d5790611d3384611bef565b6040805163340e588560e11b81526001600160a01b0380871660048301528086166024830152808516604483015283166064820152905160009173__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__9163681cb10a91608480820192602092909190829003018186803b1580156120b857600080fd5b505af41580156120cc573d6000803e3d6000fd5b505050506040513d60208110156120e257600080fd5b505195945050505050565b6001600160a01b031660009081526020819052604090205490565b600c5481565b6000612119336120ed565b1415612159576040805162461bcd60e51b815260206004820152600a602482015269140e96915493d7d0905360b21b604482015290519081900360640190fd5b336000818152601960209081526040918290204290819055825190815291517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b6121ac612b14565b6001600160a01b038216600081815260186020908152604091829020805460ff1916851515908117909155825190815291517fdf56132520665b33cd5731c5cfbacd8bee82524e67df563bb25b2be304f91d449281900390910190a25050565b60125481565b61221a612c70565b612222612d40565b60128190556040805182815290517f3ff20538222f568f27ff436c0c49dfd3e48d5b8f86533a3f759dc1c7089775ab9181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60145460009060ff16806122a457503360009081526018602052604090205460ff165b8015610d5757506012546122cc836122c06011546122c06137d2565b9063ffffffff612b8616565b111592915050565b33600090815260196020526040902054612329576040805162461bcd60e51b8152602060048201526011602482015270503a4e4f545f5749544844524157494e4760781b604482015290519081900360640190fd5b3360008181526019602090815260408083208390558051928352517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b73__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__63a89d5ddb827f00000000000000000000000000000000000000000000000000000000000000006123d57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292841660248401529216604482015290516064808301926000929190829003018186803b15801561242a57600080fd5b505af415801561243e573d6000803e3d6000fd5b5050505050565b61244d612b14565b6001600160a01b038216600081815260176020908152604091829020805460ff1916851515908117909155825190815291517f353578bbc0ab907b7018b0f7b50b5f822d31dc9fcf4c16fffa780e109ca7c9309281900390910190a25050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5481565b600d5481565b612546612b14565b6014805482151560ff19909116811790915560408051918252517feeba6fd794e30165023f7e3d017e92901622076a95d36e45906955e025ff4fe79181900360200190a150565b6000610d5361259a6129b7565b846115a3856040518060600160405280602581526020016148a360259139600160006125c46129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61318e16565b6000610d536126086129b7565b8484613010565b60115481565b6001600160a01b03166000908152600b602052604090205490565b601b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61266e612c70565b6126786001612b24565b61268181612281565b6126c6576040805162461bcd60e51b8152602060048201526011602482015270140e91115417d393d517d0531313d5d151607a1b604482015290519081900360640190fd5b3360009081526019602052604081208190556126e182613390565b90506126f860156126f1336120ed565b833361389b565b6127536001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f00000000000000000000000000000000000000000000000000000000000000008563ffffffff61395416565b61275d33826139ae565b612765612be0565b6040805160008152905133917f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d65919081900360200190a25050565b6040805163c374682560e01b81526001600160a01b0380881660048301528087166024830152808616604483015284166064820152608481018390528151600092839273__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__9263c37468259260a480840193919291829003018186803b15801561281c57600080fd5b505af4158015612830573d6000803e3d6000fd5b505050506040513d604081101561284657600080fd5b508051602090910151909890975095505050505050565b60186020526000908152604090205460ff1681565b61287a612b14565b6013548111156128bf576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f56414c554560a81b604482015290519081900360640190fd5b60138190556040805182815290517f3094b4ce0463766c3cd81ed2ae2451610dcac39a1061fa023ca9d3d4df959f759181900360200190a150565b601a60209081526000928352604080842090915290825290205481565b60006129216139fa565b9050600081136129315750611605565b611d6a61293d82613691565b613a18565b60166020908152600092835260408084209091529082529020546001600160a01b031681565b60196020526000908152604090205481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60135481565b60105481565b600f5481565b3390565b6001600160a01b038316612a005760405162461bcd60e51b81526004018080602001828103825260248152602001806148316024913960400191505060405180910390fd5b6001600160a01b038216612a455760405162461bcd60e51b81526004018080602001828103825260228152602001806147136022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b158015612ae257600080fd5b505afa158015612af6573d6000803e3d6000fd5b505050506040513d6020811015612b0c57600080fd5b505192915050565b612b1c613b1d565b611605612c70565b806002811115612b3057fe5b601454610100900460ff166002811115612b4657fe5b14611d6a576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f535441544560a81b604482015290519081900360640190fd5b6000828201838110156115ac576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a2612c5d6137d2565b60408051918252519081900360200190a3565b612c997f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b158015612cd157600080fd5b505afa158015612ce5573d6000803e3d6000fd5b505050506040513d6020811015612cfb57600080fd5b505115611605576040805162461bcd60e51b815260206004820152600e60248201526d140e941493d513d7d4105554d15160921b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612d8657503360009081526017602052604090205460ff165b611605576040805162461bcd60e51b8152602060048201526012602482015271281d2727aa2fa222a62fa7a92fa0a226a4a760711b604482015290519081900360640190fd5b6116026001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838363ffffffff613b8616565b6040805162715b0960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001660448201526064810183905290516000918291829173__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__91630715b09091608480820192606092909190829003018186803b158015612ede57600080fd5b505af4158015612ef2573d6000803e3d6000fd5b505050506040513d6060811015612f0857600080fd5b5080516020820151604090920151909450909250905080841115612f4657600d54612f3b9082860363ffffffff612b8616565b600d55612f46612917565b612fa06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008363ffffffff613b8616565b601154612fb3908563ffffffff61332a16565b60115560408051858152602081018590528082018490526060810183905290516001600160a01b038716917fd393d18014c1898545668c52621bced9493753be5b8138f2539542ca606732eb919081900360800190a25050505050565b613018612c70565b6000806130447f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b15801561307b57600080fd5b505afa15801561308f573d6000803e3d6000fd5b505050506040513d60408110156130a557600080fd5b50805160209091015190925090506130bd85846133dd565b6001600160a01b038416600090815260196020526040902054820181014211613120576040805162461bcd60e51b815260206004820152601060248201526f140e9513d7d393d517d0531313d5d15160821b604482015290519081900360640190fd5b600061312b8661201c565b1461316e576040805162461bcd60e51b815260206004820152600e60248201526d503a5245434f475f4c4f5353455360901b604482015290519081900360640190fd5b613183601561317c866120ed565b858761389b565b61243e858585613bd8565b6000818484111561321d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131e25781810151838201526020016131ca565b50505050905090810190601f16801561320f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061323033611d0d565b3360009081526008602052604081205491925090613254908363ffffffff612b8616565b336000818152600860209081526040918290208490558151868152908101849052815193945091927ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49281900390910190a25090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611bd357600080fd5b60006115ac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061318e565b600e8054600c549182905560009161338a908263ffffffff613d0416565b91505090565b6000610d577f0000000000000000000000000000000000000000000000000000000000000000600a0a6133d184670de0b6b3a764000063ffffffff61359216565b9063ffffffff613d6916565b6013546001600160a01b038316600090815260156020526040902054429161340b919063ffffffff612b8616565b111561344f576040805162461bcd60e51b815260206004820152600e60248201526d140e9195539114d7d313d0d2d15160921b604482015290519081900360640190fd5b6001600160a01b0382166000908152601b602052604090205461347582611d33856120ed565b1015611602576040805162461bcd60e51b8152602060048201526011602482015270140e925394d55197d514905394d7d09053607a1b604482015290519081900360640190fd5b6134c68282613dab565b60006135086134e3611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600a60209081526040918290208490558151848152915193945091927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a2505050565b600061356d613e52565b600d54909150613583908263ffffffff61332a16565b600d5561358e6139fa565b5090565b6000826135a157506000610d57565b828202828482816135ae57fe5b04146115ac5760405162461bcd60e51b81526004018080602001828103825260218152602001806147a26021913960400191505060405180910390fd5b806000811215610c80576040805162461bcd60e51b815260206004820152600760248201526629a6aa9d27a7a160c91b604482015290519081900360640190fd5b60008282018183128015906136415750838112155b80613656575060008312801561365657508381125b6115ac5760405162461bcd60e51b815260040180806020018281038252602181526020018061475b6021913960400191505060405180910390fd5b60008082121561358e576040805162461bcd60e51b8152602060048201526007602482015266534d493a4e454760c81b604482015290519081900360640190fd5b60006136dc610f09565b11613720576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b8061372a57611d6a565b613761613735610f09565b61374983600160801b63ffffffff61359216565b8161375057fe5b60065491900463ffffffff612b8616565b60065560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a260065460408051918252517f1f8d7705f31c3337a080803a8ad7e71946fb88d84738879be2bf402f97156e969181900360200190a150565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561386a57600080fd5b505afa15801561387e573d6000803e3d6000fd5b505050506040513d602081101561389457600080fd5b5051905090565b6001600160a01b038116600090815260208590526040812054908484016138c257816138f8565b6138f86138eb8686016133d1876138df428863ffffffff61332a16565b9063ffffffff61359216565b839063ffffffff612b8616565b6001600160a01b038416600081815260208981526040918290208490558151848152915193945091927ff9b842c70d79466435b46540bb988aa5c998b3243bf91c36380ddb5887c0f0e4929181900390910190a2505050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611ae7908590613ed7565b6139b88282613f88565b60006135086139d5611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff613d0416565b600f8054600d549182905560009161338a908263ffffffff613d0416565b6000613a22610f09565b11613a66576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b80613a7057611d6a565b6000613aa9613a7d610f09565b613a9184600160801b63ffffffff61359216565b81613a9857fe5b60095491900463ffffffff612b8616565b600981905560408051848152905191925033917ff88156a8032a0d2c65df18fafaf84e0bea647b3d94a0f7fc6ab14c97dec2bf749181900360200190a26040805182815290517f240ce2b5ce9e9e5a70010c7f8034c233d89b7ce2d60f3a38d9bc3ca01a36f88c9181900360200190a15050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611605576040805162461bcd60e51b8152602060048201526009602482015268140e9393d517d1115360ba1b604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611020908490613ed7565b613be3838383613fd4565b6000613bfd611c348360095461359290919063ffffffff16565b6001600160a01b0385166000908152600a602052604081205491925090613c2a908363ffffffff61362c16565b6001600160a01b038087166000908152600a602052604080822084905591871681529081205491925090613c64908463ffffffff613d0416565b6001600160a01b038087166000908152600a602090815260409182902084905581518681529151939450918916927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a26040805182815290516001600160a01b038716917fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3919081900360200190a2505050505050565b6000818303818312801590613d195750838113155b80613d2e5750600083128015613d2e57508381135b6115ac5760405162461bcd60e51b81526004018080602001828103825260248152602001806148556024913960400191505060405180910390fd5b60006115ac83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614100565b613db58282614165565b6000613df7613dd2611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600760209081526040918290208490558151848152915193945091927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a2505050565b6000613e5d3361201c565b336000908152600b602052604081205491925090613e81908363ffffffff612b8616565b336000818152600b60209081526040918290208490558151868152908101849052815193945091927f814eba35782909dbbaeefb8104073dfca45de43173f7077970c1584b3cf918b59281900390910190a25090565b6060613f2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661426d9092919063ffffffff16565b80519091501561102057808060200190516020811015613f4b57600080fd5b50516110205760405162461bcd60e51b815260040180806020018281038252602a815260200180614879602a913960400191505060405180910390fd5b613f928282614284565b6000613df7613faf611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff613d0416565b613fdf838383614380565b6000613ff9611c348360065461359290919063ffffffff16565b6001600160a01b03851660009081526007602052604081205491925090614026908363ffffffff61362c16565b6001600160a01b0380871660009081526007602052604080822084905591871681529081205491925090614060908463ffffffff613d0416565b6001600160a01b0380871660009081526007602090815260409182902084905581518681529151939450918916927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a26040805182815290516001600160a01b038716917ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773919081900360200190a2505050505050565b6000818361414f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156131e25781810151838201526020016131ca565b50600083858161415b57fe5b0495945050505050565b6001600160a01b0382166141aa5760405162461bcd60e51b81526004018080602001828103825260218152602001806147eb6021913960400191505060405180910390fd5b6141b682600083611020565b6141f9816040518060600160405280602281526020016146f1602291396001600160a01b038516600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b038316600090815260208190526040902055600254614225908263ffffffff61332a16565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b606061427c84846000856144e7565b949350505050565b6001600160a01b0382166142df576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6142eb60008383611020565b6002546142fe908263ffffffff612b8616565b6002556001600160a01b03821660009081526020819052604090205461432a908263ffffffff612b8616565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0383166143c55760405162461bcd60e51b815260040180806020018281038252602581526020018061480c6025913960400191505060405180910390fd5b6001600160a01b03821661440a5760405162461bcd60e51b81526004018080602001828103825260238152602001806146ce6023913960400191505060405180910390fd5b614415838383611020565b61445881604051806060016040528060268152602001614735602691396001600160a01b038616600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461448d908263ffffffff612b8616565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6060824710156145285760405162461bcd60e51b815260040180806020018281038252602681526020018061477c6026913960400191505060405180910390fd5b61453185614643565b614582576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106145c15780518252601f1990920191602091820191016145a2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614623576040519150601f19603f3d011682016040523d82523d6000602084013e614628565b606091505b5091509150614638828286614649565b979650505050505050565b3b151590565b606083156146585750816115ac565b8251156146685782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156131e25781810151838201526020016131ca565b6040518060e00160405280600790602082028036833750919291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220da4a4237042d965bfc5db9214a8286a1dcb148e626f97ab717edae2ca10a2efa64736f6c634300060b0033",
              "opcodes": "PUSH2 0x180 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5043 CODESIZE SUB DUP1 PUSH3 0x5043 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH2 0x140 DUP2 LT ISZERO PUSH3 0x39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xC0 DUP10 ADD MLOAD PUSH1 0xE0 DUP11 ADD MLOAD PUSH2 0x100 DUP12 ADD DUP1 MLOAD SWAP8 MLOAD SWAP10 SWAP12 SWAP9 SWAP11 SWAP7 SWAP10 SWAP6 SWAP9 SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP2 SWAP5 SWAP2 SWAP4 SWAP3 DUP3 ADD SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0xA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0xC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xF2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x120 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x15A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x18A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x1D2 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x1F9 SWAP3 SWAP2 SWAP1 PUSH3 0x56E JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x20F SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x56E JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH20 0x0 SWAP6 POP PUSH4 0x14985168 SWAP5 POP PUSH3 0x258 SWAP4 POP CALLER SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x4FE AND SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP3 DUP15 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP13 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP9 SWAP1 MSTORE MLOAD PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH3 0x2D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x341 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH2 0x140 MSTORE PUSH1 0x60 DUP9 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0xE0 MSTORE DUP12 DUP3 SHL AND PUSH1 0xA0 MSTORE PUSH1 0x10 DUP7 SWAP1 SSTORE PUSH2 0x160 DUP6 SWAP1 MSTORE CALLER SWAP1 SHL PUSH2 0x120 MSTORE PUSH1 0x12 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x42EF033F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x4 DUP4 ADD MSTORE DUP12 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP10 AND SWAP2 PUSH4 0x85DE067E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x3FD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x414 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xCF5BC1D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP9 AND SWAP2 PUSH4 0x19EB783A SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x474 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x489 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0xC0 MSTORE PUSH3 0xED4E00 PUSH1 0x13 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP PUSH3 0x613 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x54F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x566 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x5B1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x5E1 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x5E1 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x5E1 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x5C4 JUMP JUMPDEST POP PUSH3 0x5EF SWAP3 SWAP2 POP PUSH3 0x5F3 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x610 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x5EF JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x5FA JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x48FD PUSH3 0x746 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1139 MSTORE DUP1 PUSH2 0x1C69 MSTORE DUP1 PUSH2 0x2644 MSTORE POP DUP1 PUSH2 0x3397 MSTORE POP DUP1 PUSH2 0xD5F MSTORE DUP1 PUSH2 0xDA8 MSTORE DUP1 PUSH2 0xF5F MSTORE DUP1 PUSH2 0x19AE MSTORE DUP1 PUSH2 0x1ED1 MSTORE DUP1 PUSH2 0x23B1 MSTORE DUP1 PUSH2 0x2C75 MSTORE DUP1 PUSH2 0x3020 MSTORE POP DUP1 PUSH2 0xC87 MSTORE DUP1 PUSH2 0xE6B MSTORE DUP1 PUSH2 0x1277 MSTORE DUP1 PUSH2 0x12F2 MSTORE DUP1 PUSH2 0x139F MSTORE DUP1 PUSH2 0x1419 MSTORE DUP1 PUSH2 0x2E45 MSTORE POP DUP1 PUSH2 0xDF3 MSTORE DUP1 PUSH2 0x225F MSTORE DUP1 PUSH2 0x2E6D MSTORE POP DUP1 PUSH2 0xF87 MSTORE DUP1 PUSH2 0x12A1 MSTORE DUP1 PUSH2 0x2510 MSTORE DUP1 PUSH2 0x2728 MSTORE DUP1 PUSH2 0x2C0C MSTORE DUP1 PUSH2 0x2F75 MSTORE DUP1 PUSH2 0x32AC MSTORE DUP1 PUSH2 0x3805 MSTORE POP DUP1 PUSH2 0xE43 MSTORE DUP1 PUSH2 0x124D MSTORE DUP1 PUSH2 0x1B4C MSTORE DUP1 PUSH2 0x2D4B MSTORE DUP1 PUSH2 0x3B28 MSTORE POP DUP1 PUSH2 0xE1B MSTORE DUP1 PUSH2 0x1027 MSTORE DUP1 PUSH2 0x1375 MSTORE DUP1 PUSH2 0x13EA MSTORE DUP1 PUSH2 0x1EFA MSTORE DUP1 PUSH2 0x238D MSTORE DUP1 PUSH2 0x2705 MSTORE DUP1 PUSH2 0x2BE2 MSTORE DUP1 PUSH2 0x2DD9 MSTORE DUP1 PUSH2 0x2E1D MSTORE DUP1 PUSH2 0x2F53 MSTORE DUP1 PUSH2 0x37D6 MSTORE POP PUSH2 0x48FD PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3FB JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x215 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x125 JUMPI DUP1 PUSH4 0xC771C390 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xD82745C8 GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xD82745C8 EQ PUSH2 0xBFA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0xC20 JUMPI DUP1 PUSH4 0xEE947A7C EQ PUSH2 0xC4E JUMPI DUP1 PUSH4 0xEFF98843 EQ PUSH2 0xC56 JUMPI DUP1 PUSH4 0xFEC984E3 EQ PUSH2 0xC5E JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xC771C390 EQ PUSH2 0xB79 JUMPI DUP1 PUSH4 0xC965B548 EQ PUSH2 0xB96 JUMPI DUP1 PUSH4 0xCC0FEF02 EQ PUSH2 0xBC4 JUMPI DUP1 PUSH4 0xD7BD3C91 EQ PUSH2 0xBCC JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xB69410DE GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0xB69410DE EQ PUSH2 0xACF JUMPI DUP1 PUSH4 0xB6B55F25 EQ PUSH2 0xAD7 JUMPI DUP1 PUSH4 0xC3746825 EQ PUSH2 0xAF4 JUMPI DUP1 PUSH4 0xC59E3959 EQ PUSH2 0xB53 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0xA4F JUMPI DUP1 PUSH4 0xAC641655 EQ PUSH2 0xA7B JUMPI DUP1 PUSH4 0xAED4966A EQ PUSH2 0xA83 JUMPI DUP1 PUSH4 0xAF6D5571 EQ PUSH2 0xAA9 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 GT PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x9759164A GT PUSH2 0x177 JUMPI DUP1 PUSH4 0x9759164A EQ PUSH2 0x9EC JUMPI DUP1 PUSH4 0x9F3C7325 EQ PUSH2 0x9F4 JUMPI DUP1 PUSH4 0xA33142F7 EQ PUSH2 0x9FC JUMPI DUP1 PUSH4 0xA43BAA3D EQ PUSH2 0xA04 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0xA23 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 EQ PUSH2 0x988 JUMPI DUP1 PUSH4 0x8905FD4F EQ PUSH2 0x990 JUMPI DUP1 PUSH4 0x9185192A EQ PUSH2 0x9B6 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x9E4 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x76687D3D GT PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x76687D3D EQ PUSH2 0x93E JUMPI DUP1 PUSH4 0x7B99ADB1 EQ PUSH2 0x946 JUMPI DUP1 PUSH4 0x80CD916D EQ PUSH2 0x963 JUMPI DUP1 PUSH4 0x80E7CE85 EQ PUSH2 0x96B JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x8DA JUMPI DUP1 PUSH4 0x71073BAC EQ PUSH2 0x900 JUMPI DUP1 PUSH4 0x73EF9A50 EQ PUSH2 0x908 JUMPI DUP1 PUSH4 0x7666F125 EQ PUSH2 0x910 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D GT PUSH2 0x310 JUMPI DUP1 PUSH4 0x46C162DE GT PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x51B42B00 GT PUSH2 0x272 JUMPI DUP1 PUSH4 0x51B42B00 EQ PUSH2 0x81C JUMPI DUP1 PUSH4 0x613384F2 EQ PUSH2 0x824 JUMPI DUP1 PUSH4 0x641AD8A9 EQ PUSH2 0x84A JUMPI DUP1 PUSH4 0x66967791 EQ PUSH2 0x876 JUMPI DUP1 PUSH4 0x681CB10A EQ PUSH2 0x89C JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x46C162DE EQ PUSH2 0x7DE JUMPI DUP1 PUSH4 0x4BB278F3 EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0x4E97415F EQ PUSH2 0x7EE JUMPI DUP1 PUSH4 0x4F85221A EQ PUSH2 0x814 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x40504BA0 GT PUSH2 0x2DF JUMPI DUP1 PUSH4 0x40504BA0 EQ PUSH2 0x747 JUMPI DUP1 PUSH4 0x40BDE098 EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0x410DBF7E EQ PUSH2 0x79B JUMPI DUP1 PUSH4 0x443BB293 EQ PUSH2 0x7B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x6EE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x70B JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0x4046AF2B EQ PUSH2 0x73F JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 GT PUSH2 0x393 JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x362 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x628 JUMPI DUP1 PUSH4 0x24600FC3 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x24B92E8E EQ PUSH2 0x666 JUMPI DUP1 PUSH4 0x27F91856 EQ PUSH2 0x68C JUMPI DUP1 PUSH4 0x2AC04AC8 EQ PUSH2 0x6B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0x1AA37CEC EQ PUSH2 0x582 JUMPI DUP1 PUSH4 0x209B2BCA EQ PUSH2 0x5BA JUMPI DUP1 PUSH4 0x21C0B342 EQ PUSH2 0x5C2 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xD49B38C GT PUSH2 0x3CF JUMPI DUP1 PUSH4 0xD49B38C EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0x13BF9E7E EQ PUSH2 0x521 JUMPI DUP1 PUSH4 0x174A5BE4 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x572 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH3 0x41C52C EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x33B1CF0 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x4D9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC66 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x464 PUSH2 0xCA9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x49E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x486 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4CB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x529 PUSH2 0xD81 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP2 ISZERO ISZERO DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x55C PUSH2 0xF04 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x505 PUSH2 0xF0F JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xF18 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x440 PUSH2 0x1025 JUMP JUMPDEST PUSH2 0x5F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xE0 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x615 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5FD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x63E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1525 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1607 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1619 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x6CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x17BA JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x704 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1991 JUMP JUMPDEST PUSH2 0x55C PUSH2 0x1AED JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x729 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1AF6 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x1B4A JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x75D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1B6E JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C58 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D0D JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D6D JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E3B JUMP JUMPDEST PUSH2 0x505 PUSH2 0x1E80 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1EA0 JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x83A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1FF9 JUMP JUMPDEST PUSH2 0x852 PUSH2 0x200E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x862 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x88C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x201C JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x8B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x2042 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2108 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x210E JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x21A4 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x220C JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2212 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x225D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x981 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x22D4 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2370 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x9CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x2445 JUMP JUMPDEST PUSH2 0x464 PUSH2 0x24AD JUMP JUMPDEST PUSH2 0x440 PUSH2 0x250E JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2538 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x253E JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x258D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x25FB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x260F JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2615 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2630 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2642 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2666 JUMP JUMPDEST PUSH2 0xB3A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x285D JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2872 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x28FA JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x2942 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2968 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x297A JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29A5 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29AB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD18 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0xD4C PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH20 0x0 PUSH4 0x767F5038 PUSH2 0xDCC PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP5 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x0 SWAP1 SWAP3 AND PUSH1 0x84 DUP4 ADD MSTORE MLOAD PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xEC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xEDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD SWAP3 SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF20 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0xF2A PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0xF3D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xFBECB171 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x16 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0x0 SWAP2 PUSH4 0xFBECB171 SWAP2 PUSH1 0xC4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1000 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1014 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1020 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1051 PUSH2 0x46AF JUMP JUMPDEST PUSH2 0x1059 PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x1061 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x4E71D92D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x4E71D92D SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 PUSH1 0xE0 SWAP4 SWAP3 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x10 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3FAA6C5D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x3FAA6C5D SWAP2 DUP9 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0xE0 DUP1 DUP4 DUP4 DUP13 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x117E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1166 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x11C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 SWAP1 SWAP4 ADD MLOAD PUSH1 0x11 SLOAD SWAP3 SWAP8 POP SWAP1 SWAP6 POP SWAP2 SWAP4 POP SWAP1 SWAP2 POP DUP3 GT PUSH2 0x120E JUMPI PUSH1 0x11 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE PUSH2 0x1232 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x1224 SWAP1 DUP3 SWAP1 DUP5 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x0 SWAP1 SWAP2 SSTORE SWAP3 POP SWAP1 POP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x1245 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1272 PUSH32 0x0 DUP6 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x129C PUSH32 0x0 DUP5 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x12D5 PUSH32 0x0 PUSH2 0x12D0 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH2 0x2DCC JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MLOAD ISZERO PUSH2 0x12F0 JUMPI PUSH2 0x12F0 DUP8 DUP7 PUSH1 0x6 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x2E06 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x46C162DE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x134B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x135F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x136B PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x1373 PUSH2 0x2BE0 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1492 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 PUSH1 0x60 DUP1 DUP7 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH32 0x21280D282CE6AA29C649FD1825373D7C77892FAC3F1958FD98D5CA52DD82A197 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 LOG2 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1532 DUP5 DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH2 0x15A8 DUP5 PUSH2 0x153E PUSH2 0x29B7 JUMP JUMPDEST PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x47C3 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x157C PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x15BB PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15C5 PUSH2 0x3225 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x15D2 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x15DC CALLER DUP3 PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x15E4 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x15F7 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1602 PUSH2 0x336C JUMP JUMPDEST POP POP JUMPDEST JUMP JUMPDEST PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x164E DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1672 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST SWAP1 POP PUSH20 0x0 PUSH4 0x297E7BF7 DUP7 DUP7 DUP5 PUSH2 0x169A CALLER PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1709 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP10 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x1B DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP8 SWAP1 SSTORE DUP1 MLOAD DUP10 DUP2 MSTORE SWAP2 DUP3 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD SWAP3 SWAP6 POP SWAP3 SWAP4 POP PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x17EF DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B4C9031 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x1B4C9031 SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x185C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1870 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x1B SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x18AF SWAP1 DUP6 PUSH2 0x332A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP10 DUP2 MSTORE SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 DUP10 AND SWAP4 SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xFAA022EA2CD7F14157070896FABADAFE96CC4D4714EEF7AE6A992A5084493ED5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG4 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP3 PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1999 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19A4 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x19D2 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1A4B CALLER DUP5 PUSH2 0x33DD JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD TIMESTAMP SUB DUP2 LT ISZERO PUSH2 0x1AAC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x140E95D2551211149055D7D393D517D0531313D5D151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1AB6 CALLER DUP5 PUSH2 0x34BC JUMP JUMPDEST PUSH2 0x1ABE PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x1ADF CALLER PUSH2 0x1ADA PUSH2 0x1ACD PUSH2 0x3563 JUMP JUMPDEST DUP8 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x1AE7 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x1B03 PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x1B14 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1B76 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x175F8329 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x175F8329 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1C25 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH2 0x35EB JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH2 0x3691 JUMP JUMPDEST DUP2 PUSH2 0x1C51 JUMPI INVALID JUMPDEST DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1C60 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x2710 PUSH2 0x1C93 DUP3 PUSH32 0x0 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x1CD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x503A4241445F464545 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x10 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x9408BB8C08D29B335E36090045074610352365476D9DF02E203C25DB4FCD67C0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1E3B JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D49 PUSH2 0x336C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x1D59 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x1D65 DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x36D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1D75 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1D7F PUSH1 0x0 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D89 PUSH2 0xD81 JUMP JUMPDEST POP POP SWAP3 POP POP POP DUP1 PUSH2 0x1DD1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x503A494E5355465F5354414B45 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 MUL OR SWAP1 SSTORE POP PUSH1 0x14 SLOAD PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP2 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E25 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1E71 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x6 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E9A JUMPI INVALID JUMPDEST EQ SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1EA8 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1EB2 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xABBEDB40 PUSH2 0x1EF5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH32 0x0 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1F93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x14 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x200 OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP4 POP PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0xFF AND SWAP2 POP DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1FE4 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1BEF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x340E5885 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x681CB10A SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x20CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2119 CALLER PUSH2 0x20ED JUMP JUMPDEST EQ ISZERO PUSH2 0x2159 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x140E96915493D7D09053 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 DUP2 SWAP1 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH2 0x21AC PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xDF56132520665B33CD5731C5CFBACD8BEE82524E67DF563BB25B2BE304F91D44 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x12 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x221A PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2222 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x12 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3FF20538222F568F27FF436C0C49DFD3E48D5B8F86533A3F759DC1C7089775AB SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x22A4 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST DUP1 ISZERO PUSH2 0xD57 JUMPI POP PUSH1 0x12 SLOAD PUSH2 0x22CC DUP4 PUSH2 0x22C0 PUSH1 0x11 SLOAD PUSH2 0x22C0 PUSH2 0x37D2 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2329 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x503A4E4F545F5749544844524157494E47 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE DUP1 MLOAD SWAP3 DUP4 MSTORE MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xA89D5DDB DUP3 PUSH32 0x0 PUSH2 0x23D5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP3 DUP5 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x242A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x243E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x244D PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x353578BBC0AB907B7018B0F7B50B5F822D31DC9FCF4C16FFFA780E109CA7C930 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2546 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x14 DUP1 SLOAD DUP3 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xEEBA6FD794E30165023F7E3D017E92901622076A95D36E45906955E025FF4FE7 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x259A PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x48A3 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x25C4 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x2608 PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x266E PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2678 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH2 0x2681 DUP2 PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x26C6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E91115417D393D517D0531313D5D151 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x26E1 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH2 0x26F8 PUSH1 0x15 PUSH2 0x26F1 CALLER PUSH2 0x20ED JUMP JUMPDEST DUP4 CALLER PUSH2 0x389B JUMP JUMPDEST PUSH2 0x2753 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER PUSH32 0x0 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x3954 AND JUMP JUMPDEST PUSH2 0x275D CALLER DUP3 PUSH2 0x39AE JUMP JUMPDEST PUSH2 0x2765 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xC3746825 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP5 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH20 0x0 SWAP3 PUSH4 0xC3746825 SWAP3 PUSH1 0xA4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x281C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2846 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x287A PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 GT ISZERO PUSH2 0x28BF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F56414C5545 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x13 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3094B4CE0463766C3CD81ED2AE2451610DCAC39A1061FA023CA9D3D4DF959F75 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2921 PUSH2 0x39FA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x2931 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x293D DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x3A18 JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x10 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x2A00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4831 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2A45 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4713 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2B1C PUSH2 0x3B1D JUMP JUMPDEST PUSH2 0x1605 PUSH2 0x2C70 JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B30 JUMPI INVALID JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B46 JUMPI INVALID JUMPDEST EQ PUSH2 0x1D6A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F5354415445 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x15AC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH2 0x2C5D PUSH2 0x37D2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 JUMP JUMPDEST PUSH2 0x2C99 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x425FAD58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2CFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E941493D513D7D4105554D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 PUSH2 0x2D86 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x281D2727AA2FA222A62FA7A92FA0A226A4A7 PUSH1 0x71 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1602 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x715B09 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x715B090 SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2EDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2EF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2F08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP DUP1 DUP5 GT ISZERO PUSH2 0x2F46 JUMPI PUSH1 0xD SLOAD PUSH2 0x2F3B SWAP1 DUP3 DUP7 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x2F46 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x2FA0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH32 0x0 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x2FB3 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xD393D18014C1898545668C52621BCED9493753BE5B8138F2539542CA606732EB SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3018 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3044 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x307B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x308F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x30BD DUP6 DUP5 PUSH2 0x33DD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD DUP2 ADD TIMESTAMP GT PUSH2 0x3120 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x140E9513D7D393D517D0531313D5D151 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x312B DUP7 PUSH2 0x201C JUMP JUMPDEST EQ PUSH2 0x316E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x503A5245434F475F4C4F53534553 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3183 PUSH1 0x15 PUSH2 0x317C DUP7 PUSH2 0x20ED JUMP JUMPDEST DUP6 DUP8 PUSH2 0x389B JUMP JUMPDEST PUSH2 0x243E DUP6 DUP6 DUP6 PUSH2 0x3BD8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x321D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x320F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3230 CALLER PUSH2 0x1D0D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3254 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xFBC3A599B784FE88772FC5ABCC07223F64CA0B13ACC341F4FB1E46BEF0510EB4 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x318E JUMP JUMPDEST PUSH1 0xE DUP1 SLOAD PUSH1 0xC SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD57 PUSH32 0x0 PUSH1 0xA EXP PUSH2 0x33D1 DUP5 PUSH8 0xDE0B6B3A7640000 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D69 AND JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD TIMESTAMP SWAP2 PUSH2 0x340B SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x344F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E9195539114D7D313D0D2D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3475 DUP3 PUSH2 0x1D33 DUP6 PUSH2 0x20ED JUMP JUMPDEST LT ISZERO PUSH2 0x1602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E925394D55197D514905394D7D09053 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x34C6 DUP3 DUP3 PUSH2 0x3DAB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x34E3 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x356D PUSH2 0x3E52 JUMP JUMPDEST PUSH1 0xD SLOAD SWAP1 SWAP2 POP PUSH2 0x3583 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x358E PUSH2 0x39FA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x35A1 JUMPI POP PUSH1 0x0 PUSH2 0xD57 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x35AE JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47A2 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP2 SLT ISZERO PUSH2 0xC80 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x29A6AA9D27A7A1 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3641 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x3656 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3656 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x475B PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x358E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x534D493A4E4547 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x36DC PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3720 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x372A JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH2 0x3761 PUSH2 0x3735 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3749 DUP4 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3750 JUMPI INVALID JUMPDEST PUSH1 0x6 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x6 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x26536799ACE2C3DBE12E638EC3ADE6B4173DCF1289BE0A58D51A5003015649BD SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x1F8D7705F31C3337A080803A8AD7E71946FB88D84738879BE2BF402F97156E96 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x386A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x387E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP5 DUP5 ADD PUSH2 0x38C2 JUMPI DUP2 PUSH2 0x38F8 JUMP JUMPDEST PUSH2 0x38F8 PUSH2 0x38EB DUP7 DUP7 ADD PUSH2 0x33D1 DUP8 PUSH2 0x38DF TIMESTAMP DUP9 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF9B842C70D79466435B46540BB988AA5C998B3243BF91C36380DDB5887C0F0E4 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1AE7 SWAP1 DUP6 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x39B8 DUP3 DUP3 PUSH2 0x3F88 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x39D5 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0xF DUP1 SLOAD PUSH1 0xD SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A22 PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3A66 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x3A70 JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AA9 PUSH2 0x3A7D PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3A91 DUP5 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3A98 JUMPI INVALID JUMPDEST PUSH1 0x9 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x9 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP CALLER SWAP2 PUSH32 0xF88156A8032A0D2C65DF18FAFAF84E0BEA647B3D94A0F7FC6AB14C97DEC2BF74 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x240CE2B5CE9E9E5A70010C7F8034C233D89B7CE2D60F3A38D9BC3CA01A36F88C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x140E9393D517D11153 PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1020 SWAP1 DUP5 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x3BE3 DUP4 DUP4 DUP4 PUSH2 0x3FD4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BFD PUSH2 0x1C34 DUP4 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C2A SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C64 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3D19 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x3D2E JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3D2E JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4855 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x4100 JUMP JUMPDEST PUSH2 0x3DB5 DUP3 DUP3 PUSH2 0x4165 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3DD2 PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E5D CALLER PUSH2 0x201C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3E81 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0x814EBA35782909DBBAEEFB8104073DFCA45DE43173F7077970C1584B3CF918B5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3F2C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x426D SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1020 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1020 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4879 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3F92 DUP3 DUP3 PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3FAF PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH2 0x3FDF DUP4 DUP4 DUP4 PUSH2 0x4380 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF9 PUSH2 0x1C34 DUP4 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4026 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4060 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x414F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x415B JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47EB PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x41B6 DUP3 PUSH1 0x0 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x41F9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x46F1 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0x4225 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x427C DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x44E7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x42DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x42EB PUSH1 0x0 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x42FE SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x432A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x43C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x480C PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x440A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x46CE PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4415 DUP4 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x4458 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4735 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x448D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x4528 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x477C PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4531 DUP6 PUSH2 0x4643 JUMP JUMPDEST PUSH2 0x4582 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x45C1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x45A2 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4623 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4628 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4638 DUP3 DUP3 DUP7 PUSH2 0x4649 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4658 JUMPI POP DUP2 PUSH2 0x15AC JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x4668 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP5 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP5 MLOAD DUP6 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E63655369676E PUSH6 0x64536166654D PUSH2 0x7468 GASPRICE KECCAK256 PUSH2 0x6464 PUSH10 0x74696F6E206F76657266 PUSH13 0x6F77416464726573733A20696E PUSH20 0x756666696369656E742062616C616E636520666F PUSH19 0x2063616C6C536166654D6174683A206D756C74 PUSH10 0x706C69636174696F6E20 PUSH16 0x766572666C6F7745524332303A207472 PUSH2 0x6E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 MSTORE8 PUSH10 0x676E6564536166654D61 PUSH21 0x683A207375627472616374696F6E206F766572666C PUSH16 0x775361666545524332303A2045524332 ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x75636365656445524332303A2064656372656173 PUSH6 0x6420616C6C6F PUSH24 0x616E63652062656C6F77207A65726FA26469706673582212 KECCAK256 0xDA 0x4A TIMESTAMP CALLDATACOPY DIV 0x2D SWAP7 JUMPDEST 0xFC 0x5D 0xB9 0x21 0x4A DUP3 DUP7 LOG1 0xDC 0xB1 0x48 0xE6 0x26 0xF9 PUSH27 0xB717EDAE2CA10A2EFA64736F6C634300060B003300000000000000 ",
              "sourceMap": "171993:21232:0:-:0;;;174621:1319;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;174621:1319:0;;;;;;;;;;-1:-1:-1;174621:1319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;174621:1319:0;;;;;;;;;;-1:-1:-1;174621:1319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;174944:4;174950:6;92580:4;92586:6;55316:4;55322:6;46053:4;46059:6;36116:5;36108;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;36131:17:0;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;36158:9:0;:14;;-1:-1:-1;;36158:14:0;36170:2;36158:14;;;-1:-1:-1;175029:7:0::1;::::0;-1:-1:-1;175029:24:0::1;::::0;-1:-1:-1;175054:20:0::1;::::0;-1:-1:-1;175063:10:0::1;::::0;-1:-1:-1;;;;;;;175054:8:0::1;:20:::0;;-1:-1:-1;175054:20:0:i:1;:::-;175029:103;::::0;;-1:-1:-1;;;;;;175029:103:0::1;::::0;;;;;;-1:-1:-1;;;;;175029:103:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;175029:103:0;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;175236:15;-1:-1:-1::0;;;;;175204:48:0::1;;;-1:-1:-1::0;;;;;175204:48:0::1;;;;;::::0;::::1;175293:15;-1:-1:-1::0;;;;;175287:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;175287:33:0;175262:58:::1;;;::::0;175366:26:::1;::::0;;;-1:-1:-1;;;;;;175366:26:0;;;::::1;::::0;175402:28;;;;::::1;::::0;175440:10:::1;:26:::0;;;175476:27:::1;::::0;;;175528:10:::1;175513:25:::0;::::1;;::::0;175548:12:::1;:28:::0;;;-1:-1:-1;175677:71:0;;-1:-1:-1;;;175677:71:0;;-1:-1:-1;;;;;175366:26:0;;::::1;175677:71;::::0;::::1;::::0;;;::::1;::::0;;;;;;:41;;::::1;::::0;::::1;::::0;:71;;;;;-1:-1:-1;;175677:71:0;;;;;;;;-1:-1:-1;175677:41:0;:71;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;175677:71:0;175651:98:::1;::::0;-1:-1:-1;;;;;;175651:98:0;::::1;::::0;175785:62:::1;::::0;;-1:-1:-1;;;175785:62:0;;-1:-1:-1;;;;;175785:62:0;;::::1;;::::0;::::1;::::0;;;:45;;::::1;::::0;::::1;::::0;:62;;;;;175677:71:::1;::::0;175785:62;;;;;;;;-1:-1:-1;175785:45:0;:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;175785:62:0;175759:89:::1;::::0;-1:-1:-1;;;;;;175759:89:0;::::1;::::0;175874:8:::1;175859:12;:23:::0;175898:35:::1;::::0;;175915:17:::1;175898:35:::0;;;;::::1;::::0;::::1;::::0;;;;;;::::1;174621:1319:::0;;;;;;;;;;171993:21232;;191523:151;191585:13;191644:11;-1:-1:-1;;;;;191631:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;191631:35:0;;191523:151;-1:-1:-1;;191523:151:0:o;171993:21232::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;171993:21232:0;;;-1:-1:-1;171993:21232:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "5885": [
                  {
                    "length": 32,
                    "start": 3611
                  },
                  {
                    "length": 32,
                    "start": 4135
                  },
                  {
                    "length": 32,
                    "start": 4981
                  },
                  {
                    "length": 32,
                    "start": 5098
                  },
                  {
                    "length": 32,
                    "start": 7930
                  },
                  {
                    "length": 32,
                    "start": 9101
                  },
                  {
                    "length": 32,
                    "start": 9989
                  },
                  {
                    "length": 32,
                    "start": 11234
                  },
                  {
                    "length": 32,
                    "start": 11737
                  },
                  {
                    "length": 32,
                    "start": 11805
                  },
                  {
                    "length": 32,
                    "start": 12115
                  },
                  {
                    "length": 32,
                    "start": 14294
                  }
                ],
                "5888": [
                  {
                    "length": 32,
                    "start": 3651
                  },
                  {
                    "length": 32,
                    "start": 4685
                  },
                  {
                    "length": 32,
                    "start": 6988
                  },
                  {
                    "length": 32,
                    "start": 11595
                  },
                  {
                    "length": 32,
                    "start": 15144
                  }
                ],
                "5891": [
                  {
                    "length": 32,
                    "start": 3975
                  },
                  {
                    "length": 32,
                    "start": 4769
                  },
                  {
                    "length": 32,
                    "start": 9488
                  },
                  {
                    "length": 32,
                    "start": 10024
                  },
                  {
                    "length": 32,
                    "start": 11276
                  },
                  {
                    "length": 32,
                    "start": 12149
                  },
                  {
                    "length": 32,
                    "start": 12972
                  },
                  {
                    "length": 32,
                    "start": 14341
                  }
                ],
                "5894": [
                  {
                    "length": 32,
                    "start": 3571
                  },
                  {
                    "length": 32,
                    "start": 8799
                  },
                  {
                    "length": 32,
                    "start": 11885
                  }
                ],
                "5897": [
                  {
                    "length": 32,
                    "start": 3207
                  },
                  {
                    "length": 32,
                    "start": 3691
                  },
                  {
                    "length": 32,
                    "start": 4727
                  },
                  {
                    "length": 32,
                    "start": 4850
                  },
                  {
                    "length": 32,
                    "start": 5023
                  },
                  {
                    "length": 32,
                    "start": 5145
                  },
                  {
                    "length": 32,
                    "start": 11845
                  }
                ],
                "5900": [
                  {
                    "length": 32,
                    "start": 3423
                  },
                  {
                    "length": 32,
                    "start": 3496
                  },
                  {
                    "length": 32,
                    "start": 3935
                  },
                  {
                    "length": 32,
                    "start": 6574
                  },
                  {
                    "length": 32,
                    "start": 7889
                  },
                  {
                    "length": 32,
                    "start": 9137
                  },
                  {
                    "length": 32,
                    "start": 11381
                  },
                  {
                    "length": 32,
                    "start": 12320
                  }
                ],
                "5902": [
                  {
                    "length": 32,
                    "start": 13207
                  }
                ],
                "5908": [
                  {
                    "length": 32,
                    "start": 4409
                  },
                  {
                    "length": 32,
                    "start": 7273
                  },
                  {
                    "length": 32,
                    "start": 9796
                  }
                ]
              },
              "linkReferences": {
                "contracts/core/pool/v1/Pool.sol": {
                  "PoolLib": [
                    {
                      "length": 20,
                      "start": 3467
                    },
                    {
                      "length": 20,
                      "start": 4039
                    },
                    {
                      "length": 20,
                      "start": 4379
                    },
                    {
                      "length": 20,
                      "start": 5750
                    },
                    {
                      "length": 20,
                      "start": 6178
                    },
                    {
                      "length": 20,
                      "start": 7860
                    },
                    {
                      "length": 20,
                      "start": 8318
                    },
                    {
                      "length": 20,
                      "start": 9074
                    },
                    {
                      "length": 20,
                      "start": 10213
                    },
                    {
                      "length": 20,
                      "start": 11940
                    }
                  ]
                }
              },
              "object": "608060405234801561001057600080fd5b50600436106103fb5760003560e01c806370a0823111610215578063a9059cbb11610125578063c771c390116100b8578063d82745c811610087578063d82745c814610bfa578063dd62ed3e14610c20578063ee947a7c14610c4e578063eff9884314610c56578063fec984e314610c5e576103fb565b8063c771c39014610b79578063c965b54814610b96578063cc0fef0214610bc4578063d7bd3c9114610bcc576103fb565b8063b69410de116100f4578063b69410de14610acf578063b6b55f2514610ad7578063c374682514610af4578063c59e395914610b53576103fb565b8063a9059cbb14610a4f578063ac64165514610a7b578063aed4966a14610a83578063af6d557114610aa9576103fb565b806384b76824116101a85780639759164a116101775780639759164a146109ec5780639f3c7325146109f4578063a33142f7146109fc578063a43baa3d14610a04578063a457c2d714610a23576103fb565b806384b76824146109885780638905fd4f146109905780639185192a146109b657806395d89b41146109e4576103fb565b806376687d3d116101e457806376687d3d1461093e5780637b99adb11461094657806380cd916d1461096357806380e7ce851461096b576103fb565b806370a08231146108da57806371073bac1461090057806373ef9a50146109085780637666f12514610910576103fb565b80632e1a7d4d1161031057806346c162de116102a357806351b42b001161027257806351b42b001461081c578063613384f214610824578063641ad8a91461084a5780636696779114610876578063681cb10a1461089c576103fb565b806346c162de146107de5780634bb278f3146107e65780634e97415f146107ee5780634f85221a14610814576103fb565b806340504ba0116102df57806340504ba01461074757806340bde09814610775578063410dbf7e1461079b578063443bb293146107b8576103fb565b80632e1a7d4d146106ee578063313ce5671461070b57806339509351146107135780634046af2b1461073f576103fb565b80631831ccf21161039357806323b872dd1161036257806323b872dd1461062857806324600fc31461065e57806324b92e8e1461066657806327f918561461068c5780632ac04ac8146106b8576103fb565b80631831ccf21461057a5780631aa37cec14610582578063209b2bca146105ba57806321c0b342146105c2576103fb565b80630d49b38c116103cf5780630d49b38c1461051957806313bf9e7e14610521578063174a5be41461055457806318160ddd14610572576103fb565b806241c52c14610400578063033b1cf01461043857806306fdde031461045c578063095ea7b3146104d9575b600080fd5b6104266004803603602081101561041657600080fd5b50356001600160a01b0316610c66565b60408051918252519081900360200190f35b610440610c85565b604080516001600160a01b039092168252519081900360200190f35b610464610ca9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049e578181015183820152602001610486565b50505050905090810190601f1680156104cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610505600480360360408110156104ef57600080fd5b506001600160a01b038135169060200135610d3f565b604080519115158252519081900360200190f35b610440610d5d565b610529610d81565b6040805195865260208601949094529115158484015260608401526080830152519081900360a00190f35b61055c610f04565b6040805160ff9092168252519081900360200190f35b610426610f09565b610505610f0f565b6105b86004803603606081101561059857600080fd5b506001600160a01b03813581169160208101359091169060400135610f18565b005b610440611025565b6105f0600480360360408110156105d857600080fd5b506001600160a01b0381358116916020013516611049565b604051808260e080838360005b838110156106155781810151838201526020016105fd565b5050505090500191505060405180910390f35b6105056004803603606081101561063e57600080fd5b506001600160a01b03813581169160208101359091169060400135611525565b6105b86115b3565b6104266004803603602081101561067c57600080fd5b50356001600160a01b0316611607565b6105b8600480360360408110156106a257600080fd5b506001600160a01b038135169060200135611619565b6105b8600480360360608110156106ce57600080fd5b506001600160a01b038135811691602081013590911690604001356117ba565b6105b86004803603602081101561070457600080fd5b5035611991565b61055c611aed565b6105056004803603604081101561072957600080fd5b506001600160a01b038135169060200135611af6565b610440611b4a565b6105b86004803603604081101561075d57600080fd5b506001600160a01b0381358116916020013516611b6e565b6104266004803603602081101561078b57600080fd5b50356001600160a01b0316611bef565b6105b8600480360360208110156107b157600080fd5b5035611c58565b610426600480360360208110156107ce57600080fd5b50356001600160a01b0316611d0d565b6105b8611d3f565b6105b8611d6d565b6104266004803603602081101561080457600080fd5b50356001600160a01b0316611e3b565b610505611e80565b6105b8611ea0565b6105056004803603602081101561083a57600080fd5b50356001600160a01b0316611ff9565b61085261200e565b6040518082600281111561086257fe5b60ff16815260200191505060405180910390f35b6104266004803603602081101561088c57600080fd5b50356001600160a01b031661201c565b610426600480360360808110156108b257600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516612042565b610426600480360360208110156108f057600080fd5b50356001600160a01b03166120ed565b610426612108565b6105b861210e565b6105b86004803603604081101561092657600080fd5b506001600160a01b03813516906020013515156121a4565b61042661220c565b6105b86004803603602081101561095c57600080fd5b5035612212565b61044061225d565b6105056004803603602081101561098157600080fd5b5035612281565b6105b86122d4565b6105b8600480360360208110156109a657600080fd5b50356001600160a01b0316612370565b6105b8600480360360408110156109cc57600080fd5b506001600160a01b0381351690602001351515612445565b6104646124ad565b61044061250e565b610426612532565b610426612538565b6105b860048036036020811015610a1a57600080fd5b5035151561253e565b61050560048036036040811015610a3957600080fd5b506001600160a01b03813516906020013561258d565b61050560048036036040811015610a6557600080fd5b506001600160a01b0381351690602001356125fb565b61042661260f565b61042660048036036020811015610a9957600080fd5b50356001600160a01b0316612615565b61042660048036036020811015610abf57600080fd5b50356001600160a01b0316612630565b610426612642565b6105b860048036036020811015610aed57600080fd5b5035612666565b610b3a600480360360a0811015610b0a57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013590911690608001356127a0565b6040805192835260208301919091528051918290030190f35b61050560048036036020811015610b6957600080fd5b50356001600160a01b031661285d565b6105b860048036036020811015610b8f57600080fd5b5035612872565b61042660048036036040811015610bac57600080fd5b506001600160a01b03813581169160200135166128fa565b6105b8612917565b61044060048036036040811015610be257600080fd5b506001600160a01b0381358116916020013516612942565b61042660048036036020811015610c1057600080fd5b50356001600160a01b0316612968565b61042660048036036040811015610c3657600080fd5b506001600160a01b038135811691602001351661297a565b6104266129a5565b6104266129ab565b6104266129b1565b6001600160a01b0381166000908152600860205260409020545b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b6000610d53610d4c6129b7565b84846129bb565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080600073__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__63767f5038610dcc7f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6040805160e084901b6001600160e01b03191681526001600160a01b0392831660048201527f0000000000000000000000000000000000000000000000000000000000000000831660248201527f0000000000000000000000000000000000000000000000000000000000000000831660448201527f0000000000000000000000000000000000000000000000000000000000000000831660648201527f000000000000000000000000000000000000000000000000000000000000000090921660848301525160a48083019260a0929190829003018186803b158015610eb257600080fd5b505af4158015610ec6573d6000803e3d6000fd5b505050506040513d60a0811015610edc57600080fd5b5080516020820151604083015160608401516080909401519299919850965091945092509050565b600181565b60025490565b60145460ff1681565b610f20612b14565b610f2a6001612b24565b601154610f3d908263ffffffff612b8616565b6011556040805163fbecb17160e01b8152601660048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015280861660648301528416608482015260a48101839052905173__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__9163fbecb1719160c4808301926000929190829003018186803b15801561100057600080fd5b505af4158015611014573d6000803e3d6000fd5b50505050611020612be0565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6110516146af565b611059612c70565b611061612d40565b6001600160a01b0380841660009081526016602090815260408083208685168452909152808220548151634e71d92d60e01b81529151931692634e71d92d9260048084019360e093929083900390910190829087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060e08110156110fc57600080fd5b50601054604051633faa6c5d60e01b815291925060009182918291829173__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__91633faa6c5d9188917f00000000000000000000000000000000000000000000000000000000000000009190600401808460e08083838c5b8381101561117e578181015183820152602001611166565b50505050905001838152602001828152602001935050505060806040518083038186803b1580156111ae57600080fd5b505af41580156111c2573d6000803e3d6000fd5b505050506040513d60808110156111d857600080fd5b50805160208201516040830151606090930151601154929750909550919350909150821161120e57601180548390039055611232565b601154611224908290840363ffffffff612b8616565b601180546000909155925090505b600c54611245908263ffffffff612b8616565b600c556112727f000000000000000000000000000000000000000000000000000000000000000085612dcc565b61129c7f000000000000000000000000000000000000000000000000000000000000000084612dcc565b6112d57f00000000000000000000000000000000000000000000000000000000000000006112d0848463ffffffff612b8616565b612dcc565b60c0850151156112f0576112f0878660066020020151612e06565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346c162de6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561134b57600080fd5b505af115801561135f573d6000803e3d6000fd5b5050505061136b611d3f565b611373612be0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561147e57600080fd5b505afa158015611492573d6000803e3d6000fd5b505050506040513d60208110156114a857600080fd5b505160408051918252519081900360200190a36060808601516040805184815260208101869052808201929092529181018590526080810186905290516001600160a01b038916917f21280d282ce6aa29c649fd1825373d7c77892fac3f1958fd98d5ca52dd82a197919081900360a00190a25050505092915050565b6000611532848484613010565b6115a88461153e6129b7565b6115a3856040518060600160405280602881526020016147c3602891396001600160a01b038a1660009081526001602052604081209061157c6129b7565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61318e16565b6129bb565b5060015b9392505050565b6115bb612c70565b60006115c5613225565b9050806115d25750611605565b6115dc33826132aa565b6115e4612be0565b600c546115f7908263ffffffff61332a16565b600c5561160261336c565b50505b565b60156020526000908152604090205481565b336000908152601a602090815260408083206001600160a01b03861684529091528120549061164e828463ffffffff612b8616565b336000908152601b602052604081205491925090611672908563ffffffff612b8616565b905073__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__63297e7bf786868461169a336120ed565b6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184815260200183815260200182815260200194505050505060006040518083038186803b1580156116f557600080fd5b505af4158015611709573d6000803e3d6000fd5b5050336000818152601a602090815260408083206001600160a01b038c16808552908352818420899055848452601b835292819020879055805189815291820188905280519295509293507f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e892908290030190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a25050505050565b6001600160a01b0383166000908152601a60209081526040808320338452909152812054906117ef828463ffffffff61332a16565b60408051631b4c903160e01b81526001600160a01b0380891660048301528716602482015260448101869052905191925073__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__91631b4c903191606480820192600092909190829003018186803b15801561185c57600080fd5b505af4158015611870573d6000803e3d6000fd5b505050506001600160a01b0385166000818152601a602090815260408083203384528252808320859055928252601b9052908120546118af908561332a565b6001600160a01b038088166000818152601b60209081526040918290208590558151898152915194955092891693919233927ffaa022ea2cd7f14157070896fabadafe96cc4d4714eef7ae6a992a5084493ed59281900390910190a46040805184815260208101849052815133926001600160a01b038a16927f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e8929081900390910190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a2505050505050565b611999612c70565b60006119a482613390565b90506000806119d27f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a0957600080fd5b505afa158015611a1d573d6000803e3d6000fd5b505050506040513d6040811015611a3357600080fd5b5080516020909101519092509050611a4b33846133dd565b3360009081526019602052604090205482014203811015611aac576040805162461bcd60e51b8152602060048201526016602482015275140e95d2551211149055d7d393d517d0531313d5d15160521b604482015290519081900360640190fd5b611ab633846134bc565b611abe6115b3565b611adf33611ada611acd613563565b879063ffffffff61332a16565b6132aa565b611ae7612be0565b50505050565b60055460ff1690565b6000610d53611b036129b7565b846115a38560016000611b146129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612b8616565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b76612b14565b6001600160a01b038083166000908152601660209081526040808320858516845290915280822054815163175f832960e01b8152915193169263175f83299260048084019391929182900301818387803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050505050565b6001600160a01b0381166000908152600a6020526040812054600160801b90611c4a90611c4590611c39611c34611c25886120ed565b6009549063ffffffff61359216565b6135eb565b9063ffffffff61362c16565b613691565b81611c5157fe5b0492915050565b611c60612b14565b612710611c93827f000000000000000000000000000000000000000000000000000000000000000063ffffffff612b8616565b1115611cd2576040805162461bcd60e51b8152602060048201526009602482015268503a4241445f46454560b81b604482015290519081900360640190fd5b60108190556040805182815290517f9408bb8c08d29b335e36090045074610352365476d9df02e203c25db4fcd67c09181900360200190a150565b6001600160a01b038116600090815260086020526040812054610d5790611d3384611e3b565b9063ffffffff61332a16565b6000611d4961336c565b905060008113611d595750611605565b611d6a611d6582613691565b6136d2565b50565b611d75612b14565b611d7f6000612b24565b6000611d89610d81565b50509250505080611dd1576040805162461bcd60e51b815260206004820152600d60248201526c503a494e5355465f5354414b4560981b604482015290519081900360640190fd5b601480546001919061ff0019166101008302179055506014546040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a91610100900460ff169080826002811115611e2557fe5b60ff16815260200191505060405180910390a150565b6001600160a01b038116600090815260076020526040812054600160801b90611c4a90611c4590611c39611c34611e71886120ed565b6006549063ffffffff61359216565b60006001601454610100900460ff166002811115611e9a57fe5b14905090565b611ea8612b14565b611eb26001612b24565b73__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__63abbedb40611ef57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6011547f00000000000000000000000000000000000000000000000000000000000000006040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b03168152602001935050505060006040518083038186803b158015611f7f57600080fd5b505af4158015611f93573d6000803e3d6000fd5b50506014805461ff00191661020017908190556040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a935061010090910460ff16915080826002811115611fe457fe5b60ff16815260200191505060405180910390a1565b60176020526000908152604090205460ff1681565b601454610100900460ff1681565b6001600160a01b0381166000908152600b6020526040812054610d5790611d3384611bef565b6040805163340e588560e11b81526001600160a01b0380871660048301528086166024830152808516604483015283166064820152905160009173__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__9163681cb10a91608480820192602092909190829003018186803b1580156120b857600080fd5b505af41580156120cc573d6000803e3d6000fd5b505050506040513d60208110156120e257600080fd5b505195945050505050565b6001600160a01b031660009081526020819052604090205490565b600c5481565b6000612119336120ed565b1415612159576040805162461bcd60e51b815260206004820152600a602482015269140e96915493d7d0905360b21b604482015290519081900360640190fd5b336000818152601960209081526040918290204290819055825190815291517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b6121ac612b14565b6001600160a01b038216600081815260186020908152604091829020805460ff1916851515908117909155825190815291517fdf56132520665b33cd5731c5cfbacd8bee82524e67df563bb25b2be304f91d449281900390910190a25050565b60125481565b61221a612c70565b612222612d40565b60128190556040805182815290517f3ff20538222f568f27ff436c0c49dfd3e48d5b8f86533a3f759dc1c7089775ab9181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60145460009060ff16806122a457503360009081526018602052604090205460ff165b8015610d5757506012546122cc836122c06011546122c06137d2565b9063ffffffff612b8616565b111592915050565b33600090815260196020526040902054612329576040805162461bcd60e51b8152602060048201526011602482015270503a4e4f545f5749544844524157494e4760781b604482015290519081900360640190fd5b3360008181526019602090815260408083208390558051928352517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b73__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__63a89d5ddb827f00000000000000000000000000000000000000000000000000000000000000006123d57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292841660248401529216604482015290516064808301926000929190829003018186803b15801561242a57600080fd5b505af415801561243e573d6000803e3d6000fd5b5050505050565b61244d612b14565b6001600160a01b038216600081815260176020908152604091829020805460ff1916851515908117909155825190815291517f353578bbc0ab907b7018b0f7b50b5f822d31dc9fcf4c16fffa780e109ca7c9309281900390910190a25050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5481565b600d5481565b612546612b14565b6014805482151560ff19909116811790915560408051918252517feeba6fd794e30165023f7e3d017e92901622076a95d36e45906955e025ff4fe79181900360200190a150565b6000610d5361259a6129b7565b846115a3856040518060600160405280602581526020016148a360259139600160006125c46129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61318e16565b6000610d536126086129b7565b8484613010565b60115481565b6001600160a01b03166000908152600b602052604090205490565b601b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61266e612c70565b6126786001612b24565b61268181612281565b6126c6576040805162461bcd60e51b8152602060048201526011602482015270140e91115417d393d517d0531313d5d151607a1b604482015290519081900360640190fd5b3360009081526019602052604081208190556126e182613390565b90506126f860156126f1336120ed565b833361389b565b6127536001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f00000000000000000000000000000000000000000000000000000000000000008563ffffffff61395416565b61275d33826139ae565b612765612be0565b6040805160008152905133917f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d65919081900360200190a25050565b6040805163c374682560e01b81526001600160a01b0380881660048301528087166024830152808616604483015284166064820152608481018390528151600092839273__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__9263c37468259260a480840193919291829003018186803b15801561281c57600080fd5b505af4158015612830573d6000803e3d6000fd5b505050506040513d604081101561284657600080fd5b508051602090910151909890975095505050505050565b60186020526000908152604090205460ff1681565b61287a612b14565b6013548111156128bf576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f56414c554560a81b604482015290519081900360640190fd5b60138190556040805182815290517f3094b4ce0463766c3cd81ed2ae2451610dcac39a1061fa023ca9d3d4df959f759181900360200190a150565b601a60209081526000928352604080842090915290825290205481565b60006129216139fa565b9050600081136129315750611605565b611d6a61293d82613691565b613a18565b60166020908152600092835260408084209091529082529020546001600160a01b031681565b60196020526000908152604090205481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60135481565b60105481565b600f5481565b3390565b6001600160a01b038316612a005760405162461bcd60e51b81526004018080602001828103825260248152602001806148316024913960400191505060405180910390fd5b6001600160a01b038216612a455760405162461bcd60e51b81526004018080602001828103825260228152602001806147136022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b158015612ae257600080fd5b505afa158015612af6573d6000803e3d6000fd5b505050506040513d6020811015612b0c57600080fd5b505192915050565b612b1c613b1d565b611605612c70565b806002811115612b3057fe5b601454610100900460ff166002811115612b4657fe5b14611d6a576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f535441544560a81b604482015290519081900360640190fd5b6000828201838110156115ac576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a2612c5d6137d2565b60408051918252519081900360200190a3565b612c997f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b158015612cd157600080fd5b505afa158015612ce5573d6000803e3d6000fd5b505050506040513d6020811015612cfb57600080fd5b505115611605576040805162461bcd60e51b815260206004820152600e60248201526d140e941493d513d7d4105554d15160921b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612d8657503360009081526017602052604090205460ff165b611605576040805162461bcd60e51b8152602060048201526012602482015271281d2727aa2fa222a62fa7a92fa0a226a4a760711b604482015290519081900360640190fd5b6116026001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838363ffffffff613b8616565b6040805162715b0960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001660448201526064810183905290516000918291829173__$afd6fc65aa8ca1baa99d050f2c2d75b68d$__91630715b09091608480820192606092909190829003018186803b158015612ede57600080fd5b505af4158015612ef2573d6000803e3d6000fd5b505050506040513d6060811015612f0857600080fd5b5080516020820151604090920151909450909250905080841115612f4657600d54612f3b9082860363ffffffff612b8616565b600d55612f46612917565b612fa06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008363ffffffff613b8616565b601154612fb3908563ffffffff61332a16565b60115560408051858152602081018590528082018490526060810183905290516001600160a01b038716917fd393d18014c1898545668c52621bced9493753be5b8138f2539542ca606732eb919081900360800190a25050505050565b613018612c70565b6000806130447f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b15801561307b57600080fd5b505afa15801561308f573d6000803e3d6000fd5b505050506040513d60408110156130a557600080fd5b50805160209091015190925090506130bd85846133dd565b6001600160a01b038416600090815260196020526040902054820181014211613120576040805162461bcd60e51b815260206004820152601060248201526f140e9513d7d393d517d0531313d5d15160821b604482015290519081900360640190fd5b600061312b8661201c565b1461316e576040805162461bcd60e51b815260206004820152600e60248201526d503a5245434f475f4c4f5353455360901b604482015290519081900360640190fd5b613183601561317c866120ed565b858761389b565b61243e858585613bd8565b6000818484111561321d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131e25781810151838201526020016131ca565b50505050905090810190601f16801561320f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061323033611d0d565b3360009081526008602052604081205491925090613254908363ffffffff612b8616565b336000818152600860209081526040918290208490558151868152908101849052815193945091927ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49281900390910190a25090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611bd357600080fd5b60006115ac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061318e565b600e8054600c549182905560009161338a908263ffffffff613d0416565b91505090565b6000610d577f0000000000000000000000000000000000000000000000000000000000000000600a0a6133d184670de0b6b3a764000063ffffffff61359216565b9063ffffffff613d6916565b6013546001600160a01b038316600090815260156020526040902054429161340b919063ffffffff612b8616565b111561344f576040805162461bcd60e51b815260206004820152600e60248201526d140e9195539114d7d313d0d2d15160921b604482015290519081900360640190fd5b6001600160a01b0382166000908152601b602052604090205461347582611d33856120ed565b1015611602576040805162461bcd60e51b8152602060048201526011602482015270140e925394d55197d514905394d7d09053607a1b604482015290519081900360640190fd5b6134c68282613dab565b60006135086134e3611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600a60209081526040918290208490558151848152915193945091927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a2505050565b600061356d613e52565b600d54909150613583908263ffffffff61332a16565b600d5561358e6139fa565b5090565b6000826135a157506000610d57565b828202828482816135ae57fe5b04146115ac5760405162461bcd60e51b81526004018080602001828103825260218152602001806147a26021913960400191505060405180910390fd5b806000811215610c80576040805162461bcd60e51b815260206004820152600760248201526629a6aa9d27a7a160c91b604482015290519081900360640190fd5b60008282018183128015906136415750838112155b80613656575060008312801561365657508381125b6115ac5760405162461bcd60e51b815260040180806020018281038252602181526020018061475b6021913960400191505060405180910390fd5b60008082121561358e576040805162461bcd60e51b8152602060048201526007602482015266534d493a4e454760c81b604482015290519081900360640190fd5b60006136dc610f09565b11613720576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b8061372a57611d6a565b613761613735610f09565b61374983600160801b63ffffffff61359216565b8161375057fe5b60065491900463ffffffff612b8616565b60065560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a260065460408051918252517f1f8d7705f31c3337a080803a8ad7e71946fb88d84738879be2bf402f97156e969181900360200190a150565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561386a57600080fd5b505afa15801561387e573d6000803e3d6000fd5b505050506040513d602081101561389457600080fd5b5051905090565b6001600160a01b038116600090815260208590526040812054908484016138c257816138f8565b6138f86138eb8686016133d1876138df428863ffffffff61332a16565b9063ffffffff61359216565b839063ffffffff612b8616565b6001600160a01b038416600081815260208981526040918290208490558151848152915193945091927ff9b842c70d79466435b46540bb988aa5c998b3243bf91c36380ddb5887c0f0e4929181900390910190a2505050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611ae7908590613ed7565b6139b88282613f88565b60006135086139d5611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff613d0416565b600f8054600d549182905560009161338a908263ffffffff613d0416565b6000613a22610f09565b11613a66576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b80613a7057611d6a565b6000613aa9613a7d610f09565b613a9184600160801b63ffffffff61359216565b81613a9857fe5b60095491900463ffffffff612b8616565b600981905560408051848152905191925033917ff88156a8032a0d2c65df18fafaf84e0bea647b3d94a0f7fc6ab14c97dec2bf749181900360200190a26040805182815290517f240ce2b5ce9e9e5a70010c7f8034c233d89b7ce2d60f3a38d9bc3ca01a36f88c9181900360200190a15050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611605576040805162461bcd60e51b8152602060048201526009602482015268140e9393d517d1115360ba1b604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611020908490613ed7565b613be3838383613fd4565b6000613bfd611c348360095461359290919063ffffffff16565b6001600160a01b0385166000908152600a602052604081205491925090613c2a908363ffffffff61362c16565b6001600160a01b038087166000908152600a602052604080822084905591871681529081205491925090613c64908463ffffffff613d0416565b6001600160a01b038087166000908152600a602090815260409182902084905581518681529151939450918916927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a26040805182815290516001600160a01b038716917fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3919081900360200190a2505050505050565b6000818303818312801590613d195750838113155b80613d2e5750600083128015613d2e57508381135b6115ac5760405162461bcd60e51b81526004018080602001828103825260248152602001806148556024913960400191505060405180910390fd5b60006115ac83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614100565b613db58282614165565b6000613df7613dd2611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600760209081526040918290208490558151848152915193945091927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a2505050565b6000613e5d3361201c565b336000908152600b602052604081205491925090613e81908363ffffffff612b8616565b336000818152600b60209081526040918290208490558151868152908101849052815193945091927f814eba35782909dbbaeefb8104073dfca45de43173f7077970c1584b3cf918b59281900390910190a25090565b6060613f2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661426d9092919063ffffffff16565b80519091501561102057808060200190516020811015613f4b57600080fd5b50516110205760405162461bcd60e51b815260040180806020018281038252602a815260200180614879602a913960400191505060405180910390fd5b613f928282614284565b6000613df7613faf611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff613d0416565b613fdf838383614380565b6000613ff9611c348360065461359290919063ffffffff16565b6001600160a01b03851660009081526007602052604081205491925090614026908363ffffffff61362c16565b6001600160a01b0380871660009081526007602052604080822084905591871681529081205491925090614060908463ffffffff613d0416565b6001600160a01b0380871660009081526007602090815260409182902084905581518681529151939450918916927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a26040805182815290516001600160a01b038716917ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773919081900360200190a2505050505050565b6000818361414f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156131e25781810151838201526020016131ca565b50600083858161415b57fe5b0495945050505050565b6001600160a01b0382166141aa5760405162461bcd60e51b81526004018080602001828103825260218152602001806147eb6021913960400191505060405180910390fd5b6141b682600083611020565b6141f9816040518060600160405280602281526020016146f1602291396001600160a01b038516600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b038316600090815260208190526040902055600254614225908263ffffffff61332a16565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b606061427c84846000856144e7565b949350505050565b6001600160a01b0382166142df576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6142eb60008383611020565b6002546142fe908263ffffffff612b8616565b6002556001600160a01b03821660009081526020819052604090205461432a908263ffffffff612b8616565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0383166143c55760405162461bcd60e51b815260040180806020018281038252602581526020018061480c6025913960400191505060405180910390fd5b6001600160a01b03821661440a5760405162461bcd60e51b81526004018080602001828103825260238152602001806146ce6023913960400191505060405180910390fd5b614415838383611020565b61445881604051806060016040528060268152602001614735602691396001600160a01b038616600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461448d908263ffffffff612b8616565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6060824710156145285760405162461bcd60e51b815260040180806020018281038252602681526020018061477c6026913960400191505060405180910390fd5b61453185614643565b614582576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106145c15780518252601f1990920191602091820191016145a2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614623576040519150601f19603f3d011682016040523d82523d6000602084013e614628565b606091505b5091509150614638828286614649565b979650505050505050565b3b151590565b606083156146585750816115ac565b8251156146685782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156131e25781810151838201526020016131ca565b6040518060e00160405280600790602082028036833750919291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220da4a4237042d965bfc5db9214a8286a1dcb148e626f97ab717edae2ca10a2efa64736f6c634300060b0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3FB JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x215 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x125 JUMPI DUP1 PUSH4 0xC771C390 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xD82745C8 GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xD82745C8 EQ PUSH2 0xBFA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0xC20 JUMPI DUP1 PUSH4 0xEE947A7C EQ PUSH2 0xC4E JUMPI DUP1 PUSH4 0xEFF98843 EQ PUSH2 0xC56 JUMPI DUP1 PUSH4 0xFEC984E3 EQ PUSH2 0xC5E JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xC771C390 EQ PUSH2 0xB79 JUMPI DUP1 PUSH4 0xC965B548 EQ PUSH2 0xB96 JUMPI DUP1 PUSH4 0xCC0FEF02 EQ PUSH2 0xBC4 JUMPI DUP1 PUSH4 0xD7BD3C91 EQ PUSH2 0xBCC JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xB69410DE GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0xB69410DE EQ PUSH2 0xACF JUMPI DUP1 PUSH4 0xB6B55F25 EQ PUSH2 0xAD7 JUMPI DUP1 PUSH4 0xC3746825 EQ PUSH2 0xAF4 JUMPI DUP1 PUSH4 0xC59E3959 EQ PUSH2 0xB53 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0xA4F JUMPI DUP1 PUSH4 0xAC641655 EQ PUSH2 0xA7B JUMPI DUP1 PUSH4 0xAED4966A EQ PUSH2 0xA83 JUMPI DUP1 PUSH4 0xAF6D5571 EQ PUSH2 0xAA9 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 GT PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x9759164A GT PUSH2 0x177 JUMPI DUP1 PUSH4 0x9759164A EQ PUSH2 0x9EC JUMPI DUP1 PUSH4 0x9F3C7325 EQ PUSH2 0x9F4 JUMPI DUP1 PUSH4 0xA33142F7 EQ PUSH2 0x9FC JUMPI DUP1 PUSH4 0xA43BAA3D EQ PUSH2 0xA04 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0xA23 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 EQ PUSH2 0x988 JUMPI DUP1 PUSH4 0x8905FD4F EQ PUSH2 0x990 JUMPI DUP1 PUSH4 0x9185192A EQ PUSH2 0x9B6 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x9E4 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x76687D3D GT PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x76687D3D EQ PUSH2 0x93E JUMPI DUP1 PUSH4 0x7B99ADB1 EQ PUSH2 0x946 JUMPI DUP1 PUSH4 0x80CD916D EQ PUSH2 0x963 JUMPI DUP1 PUSH4 0x80E7CE85 EQ PUSH2 0x96B JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x8DA JUMPI DUP1 PUSH4 0x71073BAC EQ PUSH2 0x900 JUMPI DUP1 PUSH4 0x73EF9A50 EQ PUSH2 0x908 JUMPI DUP1 PUSH4 0x7666F125 EQ PUSH2 0x910 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D GT PUSH2 0x310 JUMPI DUP1 PUSH4 0x46C162DE GT PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x51B42B00 GT PUSH2 0x272 JUMPI DUP1 PUSH4 0x51B42B00 EQ PUSH2 0x81C JUMPI DUP1 PUSH4 0x613384F2 EQ PUSH2 0x824 JUMPI DUP1 PUSH4 0x641AD8A9 EQ PUSH2 0x84A JUMPI DUP1 PUSH4 0x66967791 EQ PUSH2 0x876 JUMPI DUP1 PUSH4 0x681CB10A EQ PUSH2 0x89C JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x46C162DE EQ PUSH2 0x7DE JUMPI DUP1 PUSH4 0x4BB278F3 EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0x4E97415F EQ PUSH2 0x7EE JUMPI DUP1 PUSH4 0x4F85221A EQ PUSH2 0x814 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x40504BA0 GT PUSH2 0x2DF JUMPI DUP1 PUSH4 0x40504BA0 EQ PUSH2 0x747 JUMPI DUP1 PUSH4 0x40BDE098 EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0x410DBF7E EQ PUSH2 0x79B JUMPI DUP1 PUSH4 0x443BB293 EQ PUSH2 0x7B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x6EE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x70B JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0x4046AF2B EQ PUSH2 0x73F JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 GT PUSH2 0x393 JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x362 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x628 JUMPI DUP1 PUSH4 0x24600FC3 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x24B92E8E EQ PUSH2 0x666 JUMPI DUP1 PUSH4 0x27F91856 EQ PUSH2 0x68C JUMPI DUP1 PUSH4 0x2AC04AC8 EQ PUSH2 0x6B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0x1AA37CEC EQ PUSH2 0x582 JUMPI DUP1 PUSH4 0x209B2BCA EQ PUSH2 0x5BA JUMPI DUP1 PUSH4 0x21C0B342 EQ PUSH2 0x5C2 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xD49B38C GT PUSH2 0x3CF JUMPI DUP1 PUSH4 0xD49B38C EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0x13BF9E7E EQ PUSH2 0x521 JUMPI DUP1 PUSH4 0x174A5BE4 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x572 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH3 0x41C52C EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x33B1CF0 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x4D9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC66 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x464 PUSH2 0xCA9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x49E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x486 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4CB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x529 PUSH2 0xD81 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP2 ISZERO ISZERO DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x55C PUSH2 0xF04 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x505 PUSH2 0xF0F JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xF18 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x440 PUSH2 0x1025 JUMP JUMPDEST PUSH2 0x5F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xE0 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x615 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5FD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x63E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1525 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1607 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1619 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x6CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x17BA JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x704 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1991 JUMP JUMPDEST PUSH2 0x55C PUSH2 0x1AED JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x729 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1AF6 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x1B4A JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x75D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1B6E JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C58 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D0D JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D6D JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E3B JUMP JUMPDEST PUSH2 0x505 PUSH2 0x1E80 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1EA0 JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x83A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1FF9 JUMP JUMPDEST PUSH2 0x852 PUSH2 0x200E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x862 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x88C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x201C JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x8B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x2042 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2108 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x210E JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x21A4 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x220C JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2212 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x225D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x981 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x22D4 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2370 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x9CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x2445 JUMP JUMPDEST PUSH2 0x464 PUSH2 0x24AD JUMP JUMPDEST PUSH2 0x440 PUSH2 0x250E JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2538 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x253E JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x258D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x25FB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x260F JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2615 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2630 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2642 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2666 JUMP JUMPDEST PUSH2 0xB3A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x285D JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2872 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x28FA JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x2942 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2968 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x297A JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29A5 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29AB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD18 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0xD4C PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH20 0x0 PUSH4 0x767F5038 PUSH2 0xDCC PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP5 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x0 SWAP1 SWAP3 AND PUSH1 0x84 DUP4 ADD MSTORE MLOAD PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xEC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xEDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD SWAP3 SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF20 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0xF2A PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0xF3D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xFBECB171 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x16 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0x0 SWAP2 PUSH4 0xFBECB171 SWAP2 PUSH1 0xC4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1000 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1014 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1020 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1051 PUSH2 0x46AF JUMP JUMPDEST PUSH2 0x1059 PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x1061 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x4E71D92D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x4E71D92D SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 PUSH1 0xE0 SWAP4 SWAP3 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x10 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3FAA6C5D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x3FAA6C5D SWAP2 DUP9 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0xE0 DUP1 DUP4 DUP4 DUP13 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x117E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1166 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x11C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 SWAP1 SWAP4 ADD MLOAD PUSH1 0x11 SLOAD SWAP3 SWAP8 POP SWAP1 SWAP6 POP SWAP2 SWAP4 POP SWAP1 SWAP2 POP DUP3 GT PUSH2 0x120E JUMPI PUSH1 0x11 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE PUSH2 0x1232 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x1224 SWAP1 DUP3 SWAP1 DUP5 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x0 SWAP1 SWAP2 SSTORE SWAP3 POP SWAP1 POP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x1245 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1272 PUSH32 0x0 DUP6 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x129C PUSH32 0x0 DUP5 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x12D5 PUSH32 0x0 PUSH2 0x12D0 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH2 0x2DCC JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MLOAD ISZERO PUSH2 0x12F0 JUMPI PUSH2 0x12F0 DUP8 DUP7 PUSH1 0x6 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x2E06 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x46C162DE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x134B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x135F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x136B PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x1373 PUSH2 0x2BE0 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1492 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 PUSH1 0x60 DUP1 DUP7 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH32 0x21280D282CE6AA29C649FD1825373D7C77892FAC3F1958FD98D5CA52DD82A197 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 LOG2 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1532 DUP5 DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH2 0x15A8 DUP5 PUSH2 0x153E PUSH2 0x29B7 JUMP JUMPDEST PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x47C3 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x157C PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x15BB PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15C5 PUSH2 0x3225 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x15D2 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x15DC CALLER DUP3 PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x15E4 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x15F7 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1602 PUSH2 0x336C JUMP JUMPDEST POP POP JUMPDEST JUMP JUMPDEST PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x164E DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1672 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST SWAP1 POP PUSH20 0x0 PUSH4 0x297E7BF7 DUP7 DUP7 DUP5 PUSH2 0x169A CALLER PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1709 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP10 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x1B DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP8 SWAP1 SSTORE DUP1 MLOAD DUP10 DUP2 MSTORE SWAP2 DUP3 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD SWAP3 SWAP6 POP SWAP3 SWAP4 POP PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x17EF DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B4C9031 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x1B4C9031 SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x185C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1870 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x1B SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x18AF SWAP1 DUP6 PUSH2 0x332A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP10 DUP2 MSTORE SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 DUP10 AND SWAP4 SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xFAA022EA2CD7F14157070896FABADAFE96CC4D4714EEF7AE6A992A5084493ED5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG4 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP3 PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1999 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19A4 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x19D2 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1A4B CALLER DUP5 PUSH2 0x33DD JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD TIMESTAMP SUB DUP2 LT ISZERO PUSH2 0x1AAC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x140E95D2551211149055D7D393D517D0531313D5D151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1AB6 CALLER DUP5 PUSH2 0x34BC JUMP JUMPDEST PUSH2 0x1ABE PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x1ADF CALLER PUSH2 0x1ADA PUSH2 0x1ACD PUSH2 0x3563 JUMP JUMPDEST DUP8 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x1AE7 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x1B03 PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x1B14 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1B76 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x175F8329 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x175F8329 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1C25 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH2 0x35EB JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH2 0x3691 JUMP JUMPDEST DUP2 PUSH2 0x1C51 JUMPI INVALID JUMPDEST DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1C60 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x2710 PUSH2 0x1C93 DUP3 PUSH32 0x0 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x1CD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x503A4241445F464545 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x10 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x9408BB8C08D29B335E36090045074610352365476D9DF02E203C25DB4FCD67C0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1E3B JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D49 PUSH2 0x336C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x1D59 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x1D65 DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x36D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1D75 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1D7F PUSH1 0x0 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D89 PUSH2 0xD81 JUMP JUMPDEST POP POP SWAP3 POP POP POP DUP1 PUSH2 0x1DD1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x503A494E5355465F5354414B45 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 MUL OR SWAP1 SSTORE POP PUSH1 0x14 SLOAD PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP2 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E25 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1E71 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x6 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E9A JUMPI INVALID JUMPDEST EQ SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1EA8 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1EB2 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xABBEDB40 PUSH2 0x1EF5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH32 0x0 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1F93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x14 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x200 OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP4 POP PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0xFF AND SWAP2 POP DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1FE4 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1BEF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x340E5885 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x681CB10A SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x20CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2119 CALLER PUSH2 0x20ED JUMP JUMPDEST EQ ISZERO PUSH2 0x2159 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x140E96915493D7D09053 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 DUP2 SWAP1 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH2 0x21AC PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xDF56132520665B33CD5731C5CFBACD8BEE82524E67DF563BB25B2BE304F91D44 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x12 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x221A PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2222 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x12 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3FF20538222F568F27FF436C0C49DFD3E48D5B8F86533A3F759DC1C7089775AB SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x22A4 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST DUP1 ISZERO PUSH2 0xD57 JUMPI POP PUSH1 0x12 SLOAD PUSH2 0x22CC DUP4 PUSH2 0x22C0 PUSH1 0x11 SLOAD PUSH2 0x22C0 PUSH2 0x37D2 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2329 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x503A4E4F545F5749544844524157494E47 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE DUP1 MLOAD SWAP3 DUP4 MSTORE MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xA89D5DDB DUP3 PUSH32 0x0 PUSH2 0x23D5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP3 DUP5 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x242A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x243E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x244D PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x353578BBC0AB907B7018B0F7B50B5F822D31DC9FCF4C16FFFA780E109CA7C930 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2546 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x14 DUP1 SLOAD DUP3 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xEEBA6FD794E30165023F7E3D017E92901622076A95D36E45906955E025FF4FE7 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x259A PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x48A3 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x25C4 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x2608 PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x266E PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2678 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH2 0x2681 DUP2 PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x26C6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E91115417D393D517D0531313D5D151 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x26E1 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH2 0x26F8 PUSH1 0x15 PUSH2 0x26F1 CALLER PUSH2 0x20ED JUMP JUMPDEST DUP4 CALLER PUSH2 0x389B JUMP JUMPDEST PUSH2 0x2753 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER PUSH32 0x0 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x3954 AND JUMP JUMPDEST PUSH2 0x275D CALLER DUP3 PUSH2 0x39AE JUMP JUMPDEST PUSH2 0x2765 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xC3746825 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP5 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH20 0x0 SWAP3 PUSH4 0xC3746825 SWAP3 PUSH1 0xA4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x281C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2846 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x287A PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 GT ISZERO PUSH2 0x28BF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F56414C5545 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x13 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3094B4CE0463766C3CD81ED2AE2451610DCAC39A1061FA023CA9D3D4DF959F75 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2921 PUSH2 0x39FA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x2931 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x293D DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x3A18 JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x10 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x2A00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4831 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2A45 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4713 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2B1C PUSH2 0x3B1D JUMP JUMPDEST PUSH2 0x1605 PUSH2 0x2C70 JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B30 JUMPI INVALID JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B46 JUMPI INVALID JUMPDEST EQ PUSH2 0x1D6A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F5354415445 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x15AC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH2 0x2C5D PUSH2 0x37D2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 JUMP JUMPDEST PUSH2 0x2C99 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x425FAD58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2CFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E941493D513D7D4105554D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 PUSH2 0x2D86 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x281D2727AA2FA222A62FA7A92FA0A226A4A7 PUSH1 0x71 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1602 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x715B09 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x715B090 SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2EDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2EF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2F08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP DUP1 DUP5 GT ISZERO PUSH2 0x2F46 JUMPI PUSH1 0xD SLOAD PUSH2 0x2F3B SWAP1 DUP3 DUP7 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x2F46 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x2FA0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH32 0x0 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x2FB3 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xD393D18014C1898545668C52621BCED9493753BE5B8138F2539542CA606732EB SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3018 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3044 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x307B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x308F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x30BD DUP6 DUP5 PUSH2 0x33DD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD DUP2 ADD TIMESTAMP GT PUSH2 0x3120 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x140E9513D7D393D517D0531313D5D151 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x312B DUP7 PUSH2 0x201C JUMP JUMPDEST EQ PUSH2 0x316E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x503A5245434F475F4C4F53534553 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3183 PUSH1 0x15 PUSH2 0x317C DUP7 PUSH2 0x20ED JUMP JUMPDEST DUP6 DUP8 PUSH2 0x389B JUMP JUMPDEST PUSH2 0x243E DUP6 DUP6 DUP6 PUSH2 0x3BD8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x321D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x320F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3230 CALLER PUSH2 0x1D0D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3254 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xFBC3A599B784FE88772FC5ABCC07223F64CA0B13ACC341F4FB1E46BEF0510EB4 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x318E JUMP JUMPDEST PUSH1 0xE DUP1 SLOAD PUSH1 0xC SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD57 PUSH32 0x0 PUSH1 0xA EXP PUSH2 0x33D1 DUP5 PUSH8 0xDE0B6B3A7640000 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D69 AND JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD TIMESTAMP SWAP2 PUSH2 0x340B SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x344F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E9195539114D7D313D0D2D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3475 DUP3 PUSH2 0x1D33 DUP6 PUSH2 0x20ED JUMP JUMPDEST LT ISZERO PUSH2 0x1602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E925394D55197D514905394D7D09053 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x34C6 DUP3 DUP3 PUSH2 0x3DAB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x34E3 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x356D PUSH2 0x3E52 JUMP JUMPDEST PUSH1 0xD SLOAD SWAP1 SWAP2 POP PUSH2 0x3583 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x358E PUSH2 0x39FA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x35A1 JUMPI POP PUSH1 0x0 PUSH2 0xD57 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x35AE JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47A2 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP2 SLT ISZERO PUSH2 0xC80 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x29A6AA9D27A7A1 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3641 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x3656 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3656 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x475B PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x358E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x534D493A4E4547 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x36DC PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3720 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x372A JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH2 0x3761 PUSH2 0x3735 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3749 DUP4 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3750 JUMPI INVALID JUMPDEST PUSH1 0x6 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x6 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x26536799ACE2C3DBE12E638EC3ADE6B4173DCF1289BE0A58D51A5003015649BD SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x1F8D7705F31C3337A080803A8AD7E71946FB88D84738879BE2BF402F97156E96 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x386A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x387E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP5 DUP5 ADD PUSH2 0x38C2 JUMPI DUP2 PUSH2 0x38F8 JUMP JUMPDEST PUSH2 0x38F8 PUSH2 0x38EB DUP7 DUP7 ADD PUSH2 0x33D1 DUP8 PUSH2 0x38DF TIMESTAMP DUP9 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF9B842C70D79466435B46540BB988AA5C998B3243BF91C36380DDB5887C0F0E4 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1AE7 SWAP1 DUP6 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x39B8 DUP3 DUP3 PUSH2 0x3F88 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x39D5 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0xF DUP1 SLOAD PUSH1 0xD SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A22 PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3A66 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x3A70 JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AA9 PUSH2 0x3A7D PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3A91 DUP5 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3A98 JUMPI INVALID JUMPDEST PUSH1 0x9 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x9 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP CALLER SWAP2 PUSH32 0xF88156A8032A0D2C65DF18FAFAF84E0BEA647B3D94A0F7FC6AB14C97DEC2BF74 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x240CE2B5CE9E9E5A70010C7F8034C233D89B7CE2D60F3A38D9BC3CA01A36F88C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x140E9393D517D11153 PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1020 SWAP1 DUP5 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x3BE3 DUP4 DUP4 DUP4 PUSH2 0x3FD4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BFD PUSH2 0x1C34 DUP4 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C2A SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C64 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3D19 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x3D2E JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3D2E JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4855 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x4100 JUMP JUMPDEST PUSH2 0x3DB5 DUP3 DUP3 PUSH2 0x4165 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3DD2 PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E5D CALLER PUSH2 0x201C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3E81 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0x814EBA35782909DBBAEEFB8104073DFCA45DE43173F7077970C1584B3CF918B5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3F2C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x426D SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1020 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1020 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4879 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3F92 DUP3 DUP3 PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3FAF PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH2 0x3FDF DUP4 DUP4 DUP4 PUSH2 0x4380 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF9 PUSH2 0x1C34 DUP4 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4026 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4060 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x414F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x415B JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47EB PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x41B6 DUP3 PUSH1 0x0 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x41F9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x46F1 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0x4225 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x427C DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x44E7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x42DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x42EB PUSH1 0x0 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x42FE SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x432A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x43C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x480C PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x440A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x46CE PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4415 DUP4 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x4458 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4735 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x448D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x4528 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x477C PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4531 DUP6 PUSH2 0x4643 JUMP JUMPDEST PUSH2 0x4582 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x45C1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x45A2 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4623 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4628 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4638 DUP3 DUP3 DUP7 PUSH2 0x4649 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4658 JUMPI POP DUP2 PUSH2 0x15AC JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x4668 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP5 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP5 MLOAD DUP6 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E63655369676E PUSH6 0x64536166654D PUSH2 0x7468 GASPRICE KECCAK256 PUSH2 0x6464 PUSH10 0x74696F6E206F76657266 PUSH13 0x6F77416464726573733A20696E PUSH20 0x756666696369656E742062616C616E636520666F PUSH19 0x2063616C6C536166654D6174683A206D756C74 PUSH10 0x706C69636174696F6E20 PUSH16 0x766572666C6F7745524332303A207472 PUSH2 0x6E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 MSTORE8 PUSH10 0x676E6564536166654D61 PUSH21 0x683A207375627472616374696F6E206F766572666C PUSH16 0x775361666545524332303A2045524332 ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x75636365656445524332303A2064656372656173 PUSH6 0x6420616C6C6F PUSH24 0x616E63652062656C6F77207A65726FA26469706673582212 KECCAK256 0xDA 0x4A TIMESTAMP CALLDATACOPY DIV 0x2D SWAP7 JUMPDEST 0xFC 0x5D 0xB9 0x21 0x4A DUP3 DUP7 LOG1 0xDC 0xB1 0x48 0xE6 0x26 0xF9 PUSH27 0xB717EDAE2CA10A2EFA64736F6C634300060B003300000000000000 ",
              "sourceMap": "171993:21232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48114:129;;;;;;;;;;;;;;;;-1:-1:-1;48114:129:0;-1:-1:-1;;;;;48114:129:0;;:::i;:::-;;;;;;;;;;;;;;;;172366:45;;;:::i;:::-;;;;-1:-1:-1;;;;;172366:45:0;;;;;;;;;;;;;;36244:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38280:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38280:166:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;172417:46;;;:::i;189646:258::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;172103:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37287:98;;;:::i;172817:33::-;;;:::i;176401:351::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;176401:351:0;;;;;;;;;;;;;;;;;:::i;:::-;;172155:47;;;:::i;176962:2732::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;176962:2732:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38913:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38913:317:0;;;;;;;;;;;;;;;;;:::i;186902:413::-;;;:::i;172895:75::-;;;;;;;;;;;;;;;;-1:-1:-1;172895:75:0;-1:-1:-1;;;;;172895:75:0;;:::i;187321:723::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;187321:723:0;;;;;;;;:::i;188050:710::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;188050:710:0;;;;;;;;;;;;;;;;;:::i;185108:831::-;;;;;;;;;;;;;;;;-1:-1:-1;185108:831:0;;:::i;37146:81::-;;;:::i;39625:215::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39625:215:0;;;;;;;;:::i;172209:46::-;;;:::i;176758:198::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;176758:198:0;;;;;;;;;;:::i;57596:306::-;;;;;;;;;;;;;;;;-1:-1:-1;57596:306:0;-1:-1:-1;;;;;57596:306:0;;:::i;182386:270::-;;;;;;;;;;;;;;;;-1:-1:-1;182386:270:0;;:::i;47945:163::-;;;;;;;;;;;;;;;;-1:-1:-1;47945:163:0;-1:-1:-1;;;;;47945:163:0;;:::i;51290:205::-;;;:::i;176061:334::-;;;:::i;48249:305::-;;;;;;;;;;;;;;;;-1:-1:-1;48249:305:0;-1:-1:-1;;;;;48249:305:0;;:::i;190294:117::-;;;:::i;181405:317::-;;;:::i;173057:74::-;;;;;;;;;;;;;;;;-1:-1:-1;173057:74:0;-1:-1:-1;;;;;173057:74:0;;:::i;172857:31::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57284:167;;;;;;;;;;;;;;;;-1:-1:-1;57284:167:0;-1:-1:-1;;;;;57284:167:0;;:::i;189116:261::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;189116:261:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;37443:117::-;;;;;;;;;;;;;;;;-1:-1:-1;37443:117:0;-1:-1:-1;;;;;37443:117:0;;:::i;92343:35::-;;;:::i;184074:229::-;;;:::i;182662:225::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;182662:225:0;;;;;;;;;;:::i;172732:36::-;;;:::i;181864:235::-;;;;;;;;;;;;;;;;-1:-1:-1;181864:235:0;;:::i;172316:44::-;;;:::i;189383:257::-;;;;;;;;;;;;;;;;-1:-1:-1;189383:257:0;;:::i;184309:231::-;;;:::i;188866:148::-;;;;;;;;;;;;;;;;-1:-1:-1;188866:148:0;-1:-1:-1;;;;;188866:148:0;;:::i;182893:216::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;182893:216:0;;;;;;;;;;:::i;36438:85::-;;;:::i;172261:49::-;;;:::i;92425:39::-;;;:::i;92384:34::-;;;:::i;183115:177::-;;;;;;;;;;;;;;;;-1:-1:-1;183115:177:0;;;;:::i;40327:266::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40327:266:0;;;;;;;;:::i;37763:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37763:172:0;;;;;;;;:::i;172690:36::-;;;:::i;57457:133::-;;;;;;;;;;;;;;;;-1:-1:-1;57457:133:0;-1:-1:-1;;;;;57457:133:0;;:::i;173404:85::-;;;;;;;;;;;;;;;;-1:-1:-1;173404:85:0;-1:-1:-1;;;;;173404:85:0;;:::i;172638:45::-;;;:::i;183428:640::-;;;;;;;;;;;;;;;;-1:-1:-1;183428:640:0;;:::i;189910:378::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;189910:378:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;173137:89;;;;;;;;;;;;;;;;-1:-1:-1;173137:89:0;-1:-1:-1;;;;;173137:89:0;;:::i;182105:275::-;;;;;;;;;;;;;;;;-1:-1:-1;182105:275:0;;:::i;173318:80::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;173318:80:0;;;;;;;;;;:::i;60336:206::-;;;:::i;172976:75::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;172976:75:0;;;;;;;;;;:::i;173232:80::-;;;;;;;;;;;;;;;;-1:-1:-1;173232:80:0;-1:-1:-1;;;;;173232:80:0;;:::i;37993:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37993:149:0;;;;;;;;;;:::i;172774:36::-;;;:::i;172588:44::-;;;:::i;92470:37::-;;;:::i;48114:129::-;-1:-1:-1;;;;;48214:22:0;;48188:7;48214:22;;;:14;:22;;;;;;48114:129;;;;:::o;172366:45::-;;;:::o;36244:81::-;36313:5;36306:12;;;;;;;;-1:-1:-1;;36306:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36281:13;;36306:12;;36313:5;;36306:12;;36313:5;36306:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36244:81;:::o;38280:166::-;38363:4;38379:39;38388:12;:10;:12::i;:::-;38402:7;38411:6;38379:8;:39::i;:::-;-1:-1:-1;38435:4:0;38280:166;;;;;:::o;172417:46::-;;;:::o;189646:258::-;189715:7;189724;189733:4;189739:7;189748;189774;:35;189810:22;189819:12;189810:8;:22::i;:::-;189774:123;;;;;;;-1:-1:-1;;;;;;189774:123:0;;;-1:-1:-1;;;;;189774:123:0;;;;;;;189834:10;189774:123;;;;;;189854:14;189774:123;;;;;;189871:12;189774:123;;;;;;189885:11;189774:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;189774:123:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;189774:123:0;-1:-1:-1;189774:123:0;;-1:-1:-1;189774:123:0;-1:-1:-1;189646:258:0;-1:-1:-1;189646:258:0:o;172103:45::-;172147:1;172103:45;:::o;37287:98::-;37366:12;;37287:98;:::o;172817:33::-;;;;;;:::o;176401:351::-;176493:38;:36;:38::i;:::-;176541:30;176555:15;176541:13;:30::i;:::-;176596:12;;:21;;176613:3;176596:21;:16;:21;:::i;:::-;176581:12;:36;176627:82;;;-1:-1:-1;;;176627:82:0;;176644:11;176627:82;;;;-1:-1:-1;;;;;176657:12:0;176627:82;;;;;;176671:15;176627:82;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;;:16;;:82;;;;;-1:-1:-1;;176627:82:0;;;;;;;:7;:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;176719:26;:24;:26::i;:::-;176401:351;;;:::o;172155:47::-;;;:::o;176962:2732::-;177037:27;;:::i;:::-;177076:24;:22;:24::i;:::-;177110:29;:27;:29::i;:::-;-1:-1:-1;;;;;177173:17:0;;;;;;;:11;:17;;;;;;;;:28;;;;;;;;;;;;177161:49;;-1:-1:-1;;;177161:49:0;;;;177173:28;;;177161:47;;:49;;;;;;;;;;;;;;;;;;177173:28;177161:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;177386:10:0;;177328:69;;-1:-1:-1;;;177328:69:0;;177161:49;;-1:-1:-1;177222:27:0;;;;;;;;177328:7;;:33;;177161:49;;177373:11;;177386:10;177328:69;;;177161:49;177328:69;;;177161:49;177222:27;177328:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;177328:69:0;;;;;;;;;;;;;;;177633:12;;177328:69;;-1:-1:-1;177328:69:0;;-1:-1:-1;177328:69:0;;-1:-1:-1;177328:69:0;;-1:-1:-1;177615:30:0;;177611:561;;177676:12;;;:29;;;177661:44;;177611:561;;;177788:12;;177753:48;;:13;;177771:29;;177753:48;:17;:48;:::i;:::-;177893:12;;;178051:1;178034:18;;;177893:12;-1:-1:-1;177736:65:0;-1:-1:-1;177611:561:0;178300:11;;:30;;178316:13;178300:30;:15;:30;:::i;:::-;178286:11;:44;178341:58;178365:12;178379:19;178341:23;:58::i;:::-;178476:57;178500:11;178514:18;178476:23;:57::i;:::-;179048:75;179072:15;179089:33;:14;179108:13;179089:33;:18;:33;:::i;:::-;179048:23;:75::i;:::-;179188:12;;;;:16;179184:56;;179206:34;179221:4;179227:9;179237:1;179227:12;;;;179206:14;:34::i;:::-;179318:11;-1:-1:-1;;;;;179305:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;179410:21;:19;:21::i;:::-;179442:26;:24;:26::i;:::-;179519:14;-1:-1:-1;;;;;179483:91:0;179498:11;-1:-1:-1;;;;;179483:91:0;;179536:14;-1:-1:-1;;;;;179536:24:0;;179561:11;179536:37;;;;;;;;;;;;;-1:-1:-1;;;;;179536:37:0;-1:-1:-1;;;;;179536:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;179536:37:0;179483:91;;;;;;;;;;;179536:37;179483:91;;;179633:12;;;;;179590:97;;;;;;179633:12;179590:97;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;179590:97:0;;;;;;;;;;;;;176962:2732;;;;;;;;:::o;38913:317::-;39019:4;39035:36;39045:6;39053:9;39064:6;39035:9;:36::i;:::-;39081:121;39090:6;39098:12;:10;:12::i;:::-;39112:89;39150:6;39112:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39112:19:0;;;;;;:11;:19;;;;;;39132:12;:10;:12::i;:::-;-1:-1:-1;;;;;39112:33:0;;;;;;;;;;;;-1:-1:-1;39112:33:0;;;:89;;:37;:89;:::i;:::-;39081:8;:121::i;:::-;-1:-1:-1;39219:4:0;38913:317;;;;;;:::o;186902:413::-;186971:24;:22;:24::i;:::-;187005:25;187033:18;:16;:18::i;:::-;187005:46;-1:-1:-1;187066:31:0;187062:44;;187099:7;;;187062:44;187116:60;187146:10;187158:17;187116:29;:60::i;:::-;187186:26;:24;:26::i;:::-;187237:11;;:34;;187253:17;187237:34;:15;:34;:::i;:::-;187223:11;:48;187282:26;:24;:26::i;:::-;;186902:413;;:::o;172895:75::-;;;;;;;;;;;;;:::o;187321:723::-;187463:10;187418:20;187446:28;;;:16;:28;;;;;;;;-1:-1:-1;;;;;187446:39:0;;;;;;;;;;;187523:24;187446:39;187540:6;187523:24;:16;:24;:::i;:::-;187607:10;187557:25;187585:33;;;:21;:33;;;;;;187495:52;;-1:-1:-1;187557:25:0;187585:45;;187623:6;187585:45;:37;:45;:::i;:::-;187557:73;;187641:7;:38;187680:9;187691:6;187699:17;187718:21;187728:10;187718:9;:21::i;:::-;187641:99;;;;;;;;;;;;;-1:-1:-1;;;;;187641:99:0;-1:-1:-1;;;;;187641:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;187768:10:0;187751:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;187751:39:0;;;;;;;;;;;:54;;;187815:33;;;:21;:33;;;;;;:59;;;187889:74;;;;;;;;;;;;;187751:39;;-1:-1:-1;187768:10:0;;-1:-1:-1;187889:74:0;;;;;;;;;187978:59;;;;;;;;188007:10;;187978:59;;;;;;;;;;187321:723;;;;;:::o;188050:710::-;-1:-1:-1;;;;;188172:22:0;;188149:20;188172:22;;;:16;:22;;;;;;;;188195:10;188172:34;;;;;;;;;188239:24;188172:34;188256:6;188239:24;:16;:24;:::i;:::-;188274:51;;;-1:-1:-1;;;188274:51:0;;-1:-1:-1;;;;;188274:51:0;;;;;;;;;;;;;;;;;;;;;188216:47;;-1:-1:-1;188274:7:0;;:33;;:51;;;;;-1:-1:-1;;188274:51:0;;;;;;;;:7;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;188336:22:0;;;;;;:16;:22;;;;;;;;188359:10;188336:34;;;;;;;:49;;;188432:27;;;:21;:27;;;;;;:39;;188464:6;188432:31;:39::i;:::-;-1:-1:-1;;;;;188481:27:0;;;;;;;:21;:27;;;;;;;;;:54;;;188550:45;;;;;;;188395:76;;-1:-1:-1;188550:45:0;;;;188481:27;;188566:10;;188550:45;;;;;;;;;;188610:69;;;;;;;;;;;;;;188640:10;;-1:-1:-1;;;;;188610:69:0;;;;;;;;;;;;;;188694:59;;;;;;;;188723:10;;188694:59;;;;;;;;;;188050:710;;;;;;:::o;185108:831::-;185167:24;:22;:24::i;:::-;185201:11;185215;185222:3;185215:6;:11::i;:::-;185201:25;;185237:24;185263;185291:22;185300:12;185291:8;:22::i;:::-;-1:-1:-1;;;;;185291:42:0;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;185291:44:0;;;;;;;;;-1:-1:-1;185291:44:0;-1:-1:-1;185346:29:0;185359:10;185371:3;185346:12;:29::i;:::-;185430:10;185413:28;;;;:16;:28;;;;;;:47;;185394:15;:67;185393:89;-1:-1:-1;185393:89:0;185385:124;;;;;-1:-1:-1;;;185385:124:0;;;;;;;;;;;;-1:-1:-1;;;185385:124:0;;;;;;;;;;;;;;;185520:22;185526:10;185538:3;185520:5;:22::i;:::-;185597:15;:13;:15::i;:::-;185825:70;185855:10;185867:27;185875:18;:16;:18::i;:::-;185867:3;;:27;:7;:27;:::i;:::-;185825:29;:70::i;:::-;185906:26;:24;:26::i;:::-;185108:831;;;;:::o;37146:81::-;37211:9;;;;37146:81;:::o;39625:215::-;39713:4;39729:83;39738:12;:10;:12::i;:::-;39752:7;39761:50;39800:10;39761:11;:25;39773:12;:10;:12::i;:::-;-1:-1:-1;;;;;39761:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;39761:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;172209:46::-;;;:::o;176758:198::-;176843:38;:36;:38::i;:::-;-1:-1:-1;;;;;176903:17:0;;;;;;;:11;:17;;;;;;;;:28;;;;;;;;;;;;176891:58;;-1:-1:-1;;;176891:58:0;;;;176903:28;;;176891:56;;:58;;;;;176903:17;;176891:58;;;;;;176903:17;:28;176891:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;176758:198;;:::o;57596:306::-;-1:-1:-1;;;;;57818:24:0;;57672:7;57818:24;;;:16;:24;;;;;;-1:-1:-1;;;45824:8:0;57710:166;;:133;;:86;:54;57746:17;57835:6;57746:9;:17::i;:::-;57710:14;;;:54;:35;:54;:::i;:::-;:84;:86::i;:::-;:107;:133;:107;:133;:::i;:::-;:164;:166::i;:::-;:185;;;;;;;57596:306;-1:-1:-1;;57596:306:0:o;182386:270::-;182460:38;:36;:38::i;:::-;182550:6;182516:30;:13;182534:11;182516:30;:17;:30;:::i;:::-;:40;;182508:62;;;;;-1:-1:-1;;;182508:62:0;;;;;;;;;;;;-1:-1:-1;;;182508:62:0;;;;;;;;;;;;;;;182580:10;:26;;;182621:28;;;;;;;;;;;;;;;;;182386:270;:::o;47945:163::-;-1:-1:-1;;;;;48078:22:0;;48020:7;48078:22;;;:14;:22;;;;;;48046:55;;:27;48093:6;48046:19;:27::i;:::-;:31;:55;:31;:55;:::i;51290:205::-;51355:15;51373:26;:24;:26::i;:::-;51355:44;;51426:1;51414:8;:13;51410:26;;51429:7;;;51410:26;51446:42;51463:24;:8;:22;:24::i;:::-;51446:16;:42::i;:::-;51290:205;:::o;176061:334::-;176109:38;:36;:38::i;:::-;176157:32;176171:17;176157:13;:32::i;:::-;176203:20;176229:29;:27;:29::i;:::-;176199:59;;;;;;176276:15;176268:41;;;;;-1:-1:-1;;;176268:41:0;;;;;;;;;;;;-1:-1:-1;;;176268:41:0;;;;;;;;;;;;;;;176319:9;:27;;176331:15;;176319:9;-1:-1:-1;;176319:27:0;;176331:15;176319:27;;;;-1:-1:-1;176378:9:0;;176361:27;;;;176378:9;;;;;;176361:27;176378:9;176361:27;;;;;;;;;;;;;;;;;;;;;;;;176061:334;:::o;48249:305::-;-1:-1:-1;;;;;48470:24:0;;48324:7;48470:24;;;:16;:24;;;;;;-1:-1:-1;;;45824:8:0;48362:166;;:133;;:86;:54;48398:17;48487:6;48398:9;:17::i;:::-;48362:14;;;:54;:35;:54;:::i;190294:117::-;190353:4;190389:15;190376:9;;;;;;;:28;;;;;;;;;190369:35;;190294:117;:::o;181405:317::-;181455:38;:36;:38::i;:::-;181503:30;181517:15;181503:13;:30::i;:::-;181543:7;:28;181572:22;181581:12;181572:8;:22::i;:::-;181596:12;;181618:14;181543:91;;;;;;;;;;;;;-1:-1:-1;;;;;181543:91:0;-1:-1:-1;;;;;181543:91:0;;;;;;;;;;;-1:-1:-1;;;;;181543:91:0;-1:-1:-1;;;;;181543:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;181644:9:0;:29;;-1:-1:-1;;181644:29:0;;;;;;;181688:27;;;;-1:-1:-1;181644:29:0;181705:9;;;;;;-1:-1:-1;181688:27:0;181705:9;181656:17;181688:27;;;;;;;;;;;;;;;;;;;;;;;181405:317::o;173057:74::-;;;;;;;;;;;;;;;:::o;172857:31::-;;;;;;;;;:::o;57284:167::-;-1:-1:-1;;;;;57419:24:0;;57360:7;57419:24;;;:16;:24;;;;;;57386:58;;:28;57436:6;57386:20;:28::i;189116:261::-;189308:62;;;-1:-1:-1;;;189308:62:0;;-1:-1:-1;;;;;189308:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;189282:7;;189308;;:14;;:62;;;;;;;;;;;;;;;:7;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;189308:62:0;;189116:261;-1:-1:-1;;;;;189116:261:0:o;37443:117::-;-1:-1:-1;;;;;37535:18:0;37509:7;37535:18;;;;;;;;;;;;37443:117::o;92343:35::-;;;;:::o;184074:229::-;184171:1;184138:21;184148:10;184138:9;:21::i;:::-;:35;;184130:58;;;;;-1:-1:-1;;;184130:58:0;;;;;;;;;;;;-1:-1:-1;;;184130:58:0;;;;;;;;;;;;;;;184215:10;184198:28;;;;:16;:28;;;;;;;;;184229:15;184198:46;;;;184259:37;;;;;;;;;;;;;;;;;184074:229::o;182662:225::-;182742:38;:36;:38::i;:::-;-1:-1:-1;;;;;182790:34:0;;;;;;:25;:34;;;;;;;;;:43;;-1:-1:-1;;182790:43:0;;;;;;;;;;182848:32;;;;;;;;;;;;;;;;;182662:225;;:::o;172732:36::-;;;;:::o;181864:235::-;181942:24;:22;:24::i;:::-;181976:29;:27;:29::i;:::-;182015:12;:30;;;182060:32;;;;;;;;;;;;;;;;;181864:235;:::o;172316:44::-;;;:::o;189383:257::-;189483:12;;189459:4;;189483:12;;;:53;;-1:-1:-1;189525:10:0;189499:37;;;;:25;:37;;;;;;;;189483:53;189482:151;;;;;189621:12;;189556:61;189606:10;189556:45;189588:12;;189556:27;:25;:27::i;:::-;:31;:45;:31;:45;:::i;:61::-;:77;;;189383:257;-1:-1:-1;;189383:257:0:o;184309:231::-;184388:10;184411:1;184371:28;;;:16;:28;;;;;;184363:72;;;;;-1:-1:-1;;;184363:72:0;;;;;;;;;;;;-1:-1:-1;;;184363:72:0;;;;;;;;;;;;;;;184462:10;184484:1;184445:28;;;:16;:28;;;;;;;;:41;;;184501:32;;;;;;;;;;;;;;;;184309:231::o;188866:148::-;188931:7;:20;188952:5;188967:14;188984:22;188993:12;188984:8;:22::i;:::-;188931:76;;;-1:-1:-1;;;;;;188931:76:0;;;;;;;-1:-1:-1;;;;;188931:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;188931:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;188866:148;:::o;182893:216::-;182976:38;:36;:38::i;:::-;-1:-1:-1;;;;;183024:21:0;;;;;;:10;:21;;;;;;;;;:31;;-1:-1:-1;;183024:31:0;;;;;;;;;;183070:32;;;;;;;;;;;;;;;;;182893:216;;:::o;36438:85::-;36509:7;36502:14;;;;;;;;-1:-1:-1;;36502:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36477:13;;36502:14;;36509:7;;36502:14;;36509:7;36502:14;;;;;;;;;;;;;;;;;;;;;;;;172261:49;;;:::o;92425:39::-;;;;:::o;92384:34::-;;;;:::o;183115:177::-;183179:38;:36;:38::i;:::-;183227:12;:19;;;;;-1:-1:-1;;183227:19:0;;;;;;;;183261:24;;;;;;;;;;;;;;;;183115:177;:::o;40327:266::-;40420:4;40436:129;40445:12;:10;:12::i;:::-;40459:7;40468:96;40507:15;40468:96;;;;;;;;;;;;;;;;;:11;:25;40480:12;:10;:12::i;:::-;-1:-1:-1;;;;;40468:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;40468:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;37763:172::-;37849:4;37865:42;37875:12;:10;:12::i;:::-;37889:9;37900:6;37865:9;:42::i;172690:36::-;;;;:::o;57457:133::-;-1:-1:-1;;;;;57559:24:0;57533:7;57559:24;;;:16;:24;;;;;;;57457:133::o;173404:85::-;;;;;;;;;;;;;:::o;172638:45::-;;;:::o;183428:640::-;183486:24;:22;:24::i;:::-;183520:30;183534:15;183520:13;:30::i;:::-;183568:21;183585:3;183568:16;:21::i;:::-;183560:51;;;;;-1:-1:-1;;;183560:51:0;;;;;;;;;;;;-1:-1:-1;;;183560:51:0;;;;;;;;;;;;;;;183639:10;183661:1;183622:28;;;:16;:28;;;;;:41;;;183770:11;183777:3;183770:6;:11::i;:::-;183756:25;;183791:78;183817:11;183830:21;183840:10;183830:9;:21::i;:::-;183853:3;183858:10;183791:25;:78::i;:::-;183880:65;-1:-1:-1;;;;;183880:14:0;:31;183912:10;183924:15;183941:3;183880:65;:31;:65;:::i;:::-;183955:22;183961:10;183973:3;183955:5;:22::i;:::-;183988:26;:24;:26::i;:::-;184029:32;;;184058:1;184029:32;;;;184038:10;;184029:32;;;;;;;;;;183428:640;;:::o;189910:378::-;190173:108;;;-1:-1:-1;;;190173:108:0;;-1:-1:-1;;;;;190173:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;190138:7;;;;190173;;:29;;:108;;;;;;;;;;;;;:7;:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;190173:108:0;;;;;;;;;;;-1:-1:-1;189910:378:0;-1:-1:-1;;;;;;189910:378:0:o;173137:89::-;;;;;;;;;;;;;;;:::o;182105:275::-;182183:38;:36;:38::i;:::-;182258:12;;182239:15;:31;;182231:55;;;;;-1:-1:-1;;;182231:55:0;;;;;;;;;;;;-1:-1:-1;;;182231:55:0;;;;;;;;;;;;;;;182296:12;:30;;;182341:32;;;;;;;;;;;;;;;;;182105:275;:::o;173318:80::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;60336:206::-;60402:16;60421:22;:20;:22::i;:::-;60402:41;;60471:1;60458:9;:14;60454:27;;60474:7;;;60454:27;60491:44;60509:25;:9;:23;:25::i;:::-;60491:17;:44::i;172976:75::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;172976:75:0;;:::o;173232:80::-;;;;;;;;;;;;;:::o;37993:149::-;-1:-1:-1;;;;;38108:18:0;;;38082:7;38108:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;37993:149::o;172774:36::-;;;;:::o;172588:44::-;;;;:::o;92470:37::-;;;;:::o;33677:104::-;33764:10;33677:104;:::o;43391:340::-;-1:-1:-1;;;;;43492:19:0;;43484:68;;;;-1:-1:-1;;;43484:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43570:21:0;;43562:68;;;;-1:-1:-1;;;43562:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43641:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;43692:32;;;;;;;;;;;;;;;;;43391:340;;;:::o;191523:151::-;191585:13;191644:11;-1:-1:-1;;;;;191631:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;191631:35:0;;191523:151;-1:-1:-1;;191523:151:0:o;192940:131::-;193012:18;:16;:18::i;:::-;193040:24;:22;:24::i;191153:111::-;191235:6;191222:19;;;;;;;;:9;;;;;;;:19;;;;;;;;;191214:43;;;;;-1:-1:-1;;;191214:43:0;;;;;;;;;;;;-1:-1:-1;;;191214:43:0;;;;;;;;;;;;;;26009:176;26067:7;26098:5;;;26121:6;;;;26113:46;;;;;-1:-1:-1;;;26113:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;191811:152;191911:14;-1:-1:-1;;;;;191871:85:0;191886:15;-1:-1:-1;;;;;191871:85:0;;191928:27;:25;:27::i;:::-;191871:85;;;;;;;;;;;;;;;191811:152::o;192679:132::-;192746:22;192755:12;192746:8;:22::i;:::-;-1:-1:-1;;;;;192746:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;192746:39:0;192745:40;192737:67;;;;;-1:-1:-1;;;192737:67:0;;;;;;;;;;;;-1:-1:-1;;;192737:67:0;;;;;;;;;;;;;;192440:153;192511:10;-1:-1:-1;;;;;192525:12:0;192511:26;;;:52;;-1:-1:-1;192552:10:0;192541:22;;;;:10;:22;;;;;;;;192511:52;192503:83;;;;;-1:-1:-1;;;192503:83:0;;;;;;;;;;;;-1:-1:-1;;;192503:83:0;;;;;;;;;;;;;;192218:124;192297:38;-1:-1:-1;;;;;192297:14:0;:27;192325:2;192329:5;192297:38;:27;:38;:::i;180021:1378::-;180192:79;;;-1:-1:-1;;;180192:79:0;;-1:-1:-1;;;;;180214:14:0;180192:79;;;;;;180230:11;180192:79;;;;;;180243:10;180192:79;;;;;;;;;;;;;180105:18;;;;;;180192:7;;:21;;:79;;;;;;;;;;;;;;;:7;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;180192:79:0;;;;;;;;;;;;;-1:-1:-1;180192:79:0;;-1:-1:-1;180192:79:0;-1:-1:-1;180405:49:0;;;180401:194;;;180483:10;;:65;;180498:49;;;180483:65;:14;:65;:::i;:::-;180470:10;:78;180562:22;:20;:22::i;:::-;180671:77;-1:-1:-1;;;;;180671:14:0;:27;180699:15;180716:31;180671:77;:27;:77;:::i;:::-;180774:12;;:33;;180791:15;180774:33;:16;:33;:::i;:::-;180759:12;:48;180886:506;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;180886:506:0;;;;;;;;;;;;;180021:1378;;;;;:::o;186156:740::-;186242:24;:22;:24::i;:::-;186278;186304;186332:22;186341:12;186332:8;:22::i;:::-;-1:-1:-1;;;;;186332:42:0;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;186332:44:0;;;;;;;;;-1:-1:-1;186332:44:0;-1:-1:-1;186387:23:0;186400:4;186406:3;186387:12;:23::i;:::-;-1:-1:-1;;;;;186447:20:0;;;;;;:16;:20;;;;;;:39;;:58;;186428:15;:78;186420:107;;;;;-1:-1:-1;;;186420:107:0;;;;;;;;;;;;-1:-1:-1;;;186420:107:0;;;;;;;;;;;;;;;186632:1;186594:26;186615:4;186594:20;:26::i;:::-;:40;186586:105;;;;;-1:-1:-1;;;186586:105:0;;;;;;;;;;;;-1:-1:-1;;;186586:105:0;;;;;;;;;;;;;;;186787:62;186813:11;186826:13;186836:2;186826:9;:13::i;:::-;186841:3;186846:2;186787:25;:62::i;:::-;186859:30;186875:4;186881:2;186885:3;186859:15;:30::i;26881:187::-;26967:7;27002:12;26994:6;;;;26986:29;;;;-1:-1:-1;;;26986:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27037:5:0;;;26881:187::o;47560:379::-;47606:28;47675:31;47695:10;47675:19;:31::i;:::-;47760:10;47716:23;47745:26;;;:14;:26;;;;;;47646:60;;-1:-1:-1;47716:23:0;47745:52;;47646:60;47745:52;:30;:52;:::i;:::-;47822:10;47807:26;;;;:14;:26;;;;;;;;;:44;;;47867:65;;;;;;;;;;;;;47716:81;;-1:-1:-1;47822:10:0;;47867:65;;;;;;;;;;47560:379;;:::o;193077:145::-;193179:15;-1:-1:-1;;;;;193162:42:0;;193205:2;193209:5;193162:53;;;;;;;;;;;;;-1:-1:-1;;;;;193162:53:0;-1:-1:-1;;;;;193162:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26456:134;26514:7;26540:43;26544:1;26547;26540:43;;;;;;;;;;;;;;;;;:3;:43::i;93588:253::-;93702:15;;;93746:11;;93728:29;;;;93651:6;;93775:59;;93702:15;93775:59;:27;:59;:::i;:::-;93768:66;;;93588:253;:::o;190611:131::-;190663:7;190689:46;190712:22;190706:2;:28;190689:12;:3;172088:8;190689:12;:7;:12;:::i;:::-;:16;:46;:16;:46;:::i;184723:379::-;184832:12;;-1:-1:-1;;;;;184807:20:0;;;;;;:11;:20;;;;;;184849:15;;184807:38;;:20;:38;:24;:38;:::i;:::-;:57;;184799:88;;;;;-1:-1:-1;;;184799:88:0;;;;;;;;;;;;-1:-1:-1;;;184799:88:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;184984:30:0;;;;;;:21;:30;;;;;;184953:27;184976:3;184953:18;185006:7;184953:9;:18::i;:27::-;:61;;184945:91;;;;;-1:-1:-1;;;184945:91:0;;;;;;;;;;;;-1:-1:-1;;;184945:91:0;;;;;;;;;;;;;;59957:373;60040:27;60052:7;60061:5;60040:11;:27::i;:::-;60078:24;60105:95;60148:42;60149:25;60168:5;60149:14;;:18;;:25;;;;:::i;60148:42::-;-1:-1:-1;;;;;60105:25:0;;;;;;:16;:25;;;;;;;:95;:29;:95;:::i;:::-;-1:-1:-1;;;;;60211:25:0;;;;;;:16;:25;;;;;;;;;:45;;;60272:51;;;;;;;60078:122;;-1:-1:-1;60211:25:0;;60272:51;;;;;;;;;;;59957:373;;;:::o;92672:200::-;92727:14;92762:24;:22;:24::i;:::-;92810:10;;92753:33;;-1:-1:-1;92810:22:0;;92753:33;92810:22;:14;:22;:::i;:::-;92797:10;:35;92843:22;:20;:22::i;:::-;;92672:200;:::o;27315:459::-;27373:7;27614:6;27610:45;;-1:-1:-1;27643:1:0;27636:8;;27610:45;27677:5;;;27681:1;27677;:5;:1;27700:5;;;;;:10;27692:56;;;;-1:-1:-1;;;27692:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24955:132;25042:1;25011:8;25062:6;;;25054:26;;;;;-1:-1:-1;;;25054:26:0;;;;;;;;;;;;-1:-1:-1;;;25054:26:0;;;;;;;;;;;;;;32832:210;32888:6;32917:5;;;32941:6;;;;;;:16;;;32956:1;32951;:6;;32941:16;32940:38;;;;32967:1;32963;:5;:14;;;;;32976:1;32972;:5;32963:14;32932:84;;;;-1:-1:-1;;;32932:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24704:135;24760:7;24792:1;24787;:6;;24779:26;;;;;-1:-1:-1;;;24779:26:0;;;;;;;;;;;;-1:-1:-1;;;24779:26:0;;;;;;;;;;;;;;46959:338;47043:1;47027:13;:11;:13::i;:::-;:17;47019:45;;;;;-1:-1:-1;;;47019:45:0;;;;;;;;;;;;-1:-1:-1;;;47019:45:0;;;;;;;;;;;;;;;47079:10;47075:23;;47091:7;;47075:23;47125:63;47174:13;:11;:13::i;:::-;47144:27;:5;-1:-1:-1;;;47144:27:0;:9;:27;:::i;:::-;:43;;;;;47125:14;;;47144:43;;47125:63;:18;:63;:::i;:::-;47108:14;:80;47203:35;;;;;;;;47220:10;;47203:35;;;;;;;;;;47275:14;;47253:37;;;;;;;;;;;;;;;;46959:338;:::o;190880:134::-;190940:7;190966:14;-1:-1:-1;;;;;190966:24:0;;190991:15;190966:41;;;;;;;;;;;;;-1:-1:-1;;;;;190966:41:0;-1:-1:-1;;;;;190966:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;190966:41:0;;-1:-1:-1;190880:134:0;:::o;157611:581::-;-1:-1:-1;;;;;157772:20:0;;157753:16;157772:20;;;;;;;;;;;;157966:13;;;157965:128;;158085:8;157965:128;;;157999:71;158012:57;158055:13;;;158012:38;158065:3;158012:29;:15;158032:8;158012:29;:19;:29;:::i;:::-;:33;:38;:33;:38;:::i;:57::-;157999:8;;:71;:12;:71;:::i;:::-;-1:-1:-1;;;;;158104:20:0;;;;;;;;;;;;;;;:30;;;158149:36;;;;;;;157947:146;;-1:-1:-1;158104:20:0;;158149:36;;;;;;;;;;;157611:581;;;;;;:::o;144355:203::-;144482:68;;;-1:-1:-1;;;;;144482:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;144482:68:0;-1:-1:-1;;;144482:68:0;;;144455:96;;144475:5;;144455:19;:96::i;59266:373::-;59349:27;59361:7;59370:5;59349:11;:27::i;:::-;59387:24;59414:95;59457:42;59458:25;59477:5;59458:14;;:18;;:25;;;;:::i;59457:42::-;-1:-1:-1;;;;;59414:25:0;;;;;;:16;:25;;;;;;;:95;:29;:95;:::i;93105:244::-;93216:13;;;93256:10;;93240:26;;;;93164:6;;93284:58;;93216:13;93284:58;:25;:58;:::i;56216:402::-;56301:1;56285:13;:11;:13::i;:::-;:17;56277:45;;;;;-1:-1:-1;;;56277:45:0;;;;;;;;;;;;-1:-1:-1;;;56277:45:0;;;;;;;;;;;;;;;56337:10;56333:23;;56349:7;;56333:23;56366;56392:63;56441:13;:11;:13::i;:::-;56411:27;:5;-1:-1:-1;;;56411:27:0;:9;:27;:::i;:::-;:43;;;;;56392:14;;;56411:43;;56392:63;:18;:63;:::i;:::-;56465:14;:41;;;56522:36;;;;;;;;56366:89;;-1:-1:-1;56540:10:0;;56522:36;;;;;;;;;56573:38;;;;;;;;;;;;;;;;;56216:402;;:::o;191346:107::-;191406:10;-1:-1:-1;;;;;191420:12:0;191406:26;;191398:48;;;;;-1:-1:-1;;;191398:48:0;;;;;;;;;;;;-1:-1:-1;;;191398:48:0;;;;;;;;;;;;;;144174:175;144283:58;;;-1:-1:-1;;;;;144283:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;144283:58:0;-1:-1:-1;;;144283:58:0;;;144256:86;;144276:5;;144256:19;:86::i;58299:663::-;58425:32;58441:4;58447:2;58451:5;58425:15;:32::i;:::-;58468:24;58498:40;:25;58517:5;58498:14;;:18;;:25;;;;:::i;:40::-;-1:-1:-1;;;;;58578:22:0;;58548:27;58578:22;;;:16;:22;;;;;;58468:70;;-1:-1:-1;58548:27:0;58578:45;;58468:70;58578:45;:26;:45;:::i;:::-;-1:-1:-1;;;;;58633:22:0;;;;;;;:16;:22;;;;;;:50;;;58723:20;;;;;;;;;58548:75;;-1:-1:-1;58633:22:0;58723:43;;58748:17;58723:43;:24;:43;:::i;:::-;-1:-1:-1;;;;;58776:20:0;;;;;;;:16;:20;;;;;;;;;:48;;;58840:51;;;;;;;58693:73;;-1:-1:-1;58840:51:0;;;;;;;;;;;;;;;58906:49;;;;;;;;-1:-1:-1;;;;;58906:49:0;;;;;;;;;;;;;58299:663;;;;;;:::o;32386:213::-;32442:6;32471:5;;;32495:6;;;;;;:16;;;32510:1;32505;:6;;32495:16;32494:38;;;;32521:1;32517;:5;:14;;;;;32530:1;32526;:5;32517:14;32486:87;;;;-1:-1:-1;;;32486:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28236:130;28294:7;28320:39;28324:1;28327;28320:39;;;;;;;;;;;;;;;;;:3;:39::i;50531:373::-;50614:27;50626:7;50635:5;50614:11;:27::i;:::-;50652:24;50679:95;50722:42;50723:25;50742:5;50723:14;;:18;;:25;;;;:::i;50722:42::-;-1:-1:-1;;;;;50679:25:0;;;;;;:16;:25;;;;;;;:95;:29;:95;:::i;:::-;-1:-1:-1;;;;;50785:25:0;;;;;;:16;:25;;;;;;;;;:45;;;50846:51;;;;;;;50652:122;;-1:-1:-1;50785:25:0;;50846:51;;;;;;;;;;;50531:373;;;:::o;56885:393::-;56937:28;57000:32;57021:10;57000:20;:32::i;:::-;57091:10;57043:25;57074:28;;;:16;:28;;;;;;56977:55;;-1:-1:-1;57043:25:0;57074:54;;56977:55;57074:54;:32;:54;:::i;:::-;57155:10;57138:28;;;;:16;:28;;;;;;;;;:48;;;57202:69;;;;;;;;;;;;;57043:85;;-1:-1:-1;57155:10:0;;57202:69;;;;;;;;;;56885:393;;:::o;146437:751::-;146856:23;146882:69;146910:4;146882:69;;;;;;;;;;;;;;;;;146890:5;-1:-1:-1;;;;;146882:27:0;;;:69;;;;;:::i;:::-;146965:17;;146856:95;;-1:-1:-1;146965:21:0;146961:221;;147105:10;147094:30;;;;;;;;;;;;;;;-1:-1:-1;147094:30:0;147086:85;;;;-1:-1:-1;;;147086:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49846:373;49929:27;49941:7;49950:5;49929:11;:27::i;:::-;49967:24;49994:95;50037:42;50038:25;50057:5;50038:14;;:18;;:25;;;;:::i;50037:42::-;-1:-1:-1;;;;;49994:25:0;;;;;;:16;:25;;;;;;;:95;:29;:95;:::i;48945:657::-;49071:32;49087:4;49093:2;49097:5;49071:15;:32::i;:::-;49114:21;49144:40;:25;49163:5;49144:14;;:18;;:25;;;;:::i;:40::-;-1:-1:-1;;;;;49224:22:0;;49194:27;49224:22;;;:16;:22;;;;;;49114:70;;-1:-1:-1;49194:27:0;49224:42;;49114:70;49224:42;:26;:42;:::i;:::-;-1:-1:-1;;;;;49276:22:0;;;;;;;:16;:22;;;;;;:50;;;49366:20;;;;;;;;;49194:72;;-1:-1:-1;49276:22:0;49366:40;;49391:14;49366:40;:24;:40;:::i;:::-;-1:-1:-1;;;;;49416:20:0;;;;;;;:16;:20;;;;;;;;;:48;;;49480:51;;;;;;;49336:70;;-1:-1:-1;49480:51:0;;;;;;;;;;;;;;;49546:49;;;;;;;;-1:-1:-1;;;;;49546:49:0;;;;;;;;;;;;;48945:657;;;;;;:::o;28848:272::-;28934:7;28968:12;28961:5;28953:28;;;;-1:-1:-1;;;28953:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28991:9;29007:1;29003;:5;;;;;;;28848:272;-1:-1:-1;;;;;28848:272:0:o;42558:410::-;-1:-1:-1;;;;;42641:21:0;;42633:67;;;;-1:-1:-1;;;42633:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42711:49;42732:7;42749:1;42753:6;42711:20;:49::i;:::-;42792:68;42815:6;42792:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42792:18:0;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;42771:18:0;;:9;:18;;;;;;;;;;:89;42885:12;;:24;;42902:6;42885:24;:16;:24;:::i;:::-;42870:12;:39;42924:37;;;;;;;;42950:1;;-1:-1:-1;;;;;42924:37:0;;;;;;;;;;;;42558:410;;:::o;140150:193::-;140253:12;140284:52;140306:6;140314:4;140320:1;140323:12;140284:21;:52::i;:::-;140277:59;140150:193;-1:-1:-1;;;;140150:193:0:o;41868:370::-;-1:-1:-1;;;;;41951:21:0;;41943:65;;;;;-1:-1:-1;;;41943:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42019:49;42048:1;42052:7;42061:6;42019:20;:49::i;:::-;42094:12;;:24;;42111:6;42094:24;:16;:24;:::i;:::-;42079:12;:39;-1:-1:-1;;;;;42149:18:0;;:9;:18;;;;;;;;;;;:30;;42172:6;42149:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;42128:18:0;;:9;:18;;;;;;;;;;;:51;;;;42194:37;;;;;;;42128:18;;:9;;42194:37;;;;;;;;;;41868:370;;:::o;41067:530::-;-1:-1:-1;;;;;41172:20:0;;41164:70;;;;-1:-1:-1;;;41164:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41252:23:0;;41244:71;;;;-1:-1:-1;;;41244:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41326:47;41347:6;41355:9;41366:6;41326:20;:47::i;:::-;41404:71;41426:6;41404:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41404:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;41384:17:0;;;:9;:17;;;;;;;;;;;:91;;;;41508:20;;;;;;;:32;;41533:6;41508:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;41485:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;41555:35;;;;;;;41485:20;;41555:35;;;;;;;;;;;;;41067:530;;;:::o;141177:523::-;141304:12;141361:5;141336:21;:30;;141328:81;;;;-1:-1:-1;;;141328:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;141427:18;141438:6;141427:10;:18::i;:::-;141419:60;;;;;-1:-1:-1;;;141419:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;141550:12;141564:23;141591:6;-1:-1:-1;;;;;141591:11:0;141611:5;141619:4;141591:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;141591:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;141549:75;;;;141641:52;141659:7;141668:10;141680:12;141641:17;:52::i;:::-;141634:59;141177:523;-1:-1:-1;;;;;;;141177:523:0:o;137295:413::-;137655:20;137693:8;;;137295:413::o;142680:725::-;142795:12;142823:7;142819:580;;;-1:-1:-1;142853:10:0;142846:17;;142819:580;142964:17;;:21;142960:429;;143222:10;143216:17;143282:15;143269:10;143265:2;143261:19;143254:44;143171:145;143354:20;;-1:-1:-1;;;143354:20:0;;;;;;;;;;;;;;;;;143361:12;;143354:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o"
            },
            "methodIdentifiers": {
              "BPTVal(address,address,address,address)": "681cb10a",
              "DL_FACTORY()": "174a5be4",
              "accumulativeFundsOf(address)": "4e97415f",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "allowedLiquidityProviders(address)": "c59e3959",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "cancelWithdraw()": "84b76824",
              "claim(address,address)": "21c0b342",
              "custodyAllowance(address,address)": "c965b548",
              "deactivate()": "51b42b00",
              "debtLockers(address,address)": "d7bd3c91",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "delegateFee()": "b69410de",
              "deposit(uint256)": "b6b55f25",
              "depositDate(address)": "24b92e8e",
              "finalize()": "4bb278f3",
              "fundLoan(address,address,uint256)": "1aa37cec",
              "getInitialStakeRequirements()": "13bf9e7e",
              "getPoolSharesRequired(address,address,address,address,uint256)": "c3746825",
              "increaseAllowance(address,uint256)": "39509351",
              "increaseCustodyAllowance(address,uint256)": "27f91856",
              "intendToWithdraw()": "73ef9a50",
              "interestBalance()": "9f3c7325",
              "interestSum()": "71073bac",
              "isDepositAllowed(uint256)": "80e7ce85",
              "isPoolFinalized()": "4f85221a",
              "liquidityAsset()": "209b2bca",
              "liquidityCap()": "76687d3d",
              "liquidityLocker()": "9759164a",
              "lockupPeriod()": "ee947a7c",
              "lossesBalance()": "fec984e3",
              "name()": "06fdde03",
              "openToPublic()": "1831ccf2",
              "poolAdmins(address)": "613384f2",
              "poolDelegate()": "4046af2b",
              "poolLosses()": "a33142f7",
              "poolState()": "641ad8a9",
              "principalOut()": "ac641655",
              "reclaimERC20(address)": "8905fd4f",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "setAllowList(address,bool)": "7666f125",
              "setLiquidityCap(uint256)": "7b99adb1",
              "setLockupPeriod(uint256)": "c771c390",
              "setOpenToPublic(bool)": "a43baa3d",
              "setPoolAdmin(address,bool)": "9185192a",
              "setStakingFee(uint256)": "410dbf7e",
              "stakeAsset()": "80cd916d",
              "stakeLocker()": "033b1cf0",
              "stakingFee()": "eff98843",
              "superFactory()": "0d49b38c",
              "symbol()": "95d89b41",
              "totalCustodyAllowance(address)": "af6d5571",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferByCustodian(address,address,uint256)": "2ac04ac8",
              "transferFrom(address,address,uint256)": "23b872dd",
              "triggerDefault(address,address)": "40504ba0",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdraw(uint256)": "2e1a7d4d",
              "withdrawCooldown(address)": "d82745c8",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "PoolFDT": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestSum",
              "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": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolLosses",
              "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": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "interestBalance()": "9f3c7325",
              "interestSum()": "71073bac",
              "lossesBalance()": "fec984e3",
              "name()": "06fdde03",
              "poolLosses()": "a33142f7",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "PoolLib": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "depositDate",
                  "type": "uint256"
                }
              ],
              "name": "DepositDateUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amountFunded",
                  "type": "uint256"
                }
              ],
              "name": "LoanFunded",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "BPTVal",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "DL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "MAX_UINT256",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "WAD",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256[7]",
                  "name": "claimInfo",
                  "type": "uint256[7]"
                },
                {
                  "internalType": "uint256",
                  "name": "delegateFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "stakingFee",
                  "type": "uint256"
                }
              ],
              "name": "calculateClaimAndPortions",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "poolDelegatePortion",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "stakeLockerPortion",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "principalClaim",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "interestClaim",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "liquidityAssetDecimals",
                  "type": "uint256"
                }
              ],
              "name": "fromWad",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "globals",
                  "type": "IMapleGlobals"
                },
                {
                  "internalType": "address",
                  "name": "balancerPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "poolDelegate",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "getInitialStakeRequirements",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "swapOutAmountRequired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "currentPoolDelegateCover",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "enoughStakeForFinalization",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "poolAmountInRequired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "poolAmountPresent",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "liquidityAssetAmountRequired",
                  "type": "uint256"
                }
              ],
              "name": "getPoolSharesRequired",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "poolAmountInRequired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "stakerBalance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "getSwapOutValue",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "getSwapOutValueLocker",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "newTotalAllowance",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fdtBal",
                  "type": "uint256"
                }
              ],
              "name": "increaseCustodyAllowanceChecks",
              "outputs": [],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "globals",
                  "type": "IMapleGlobals"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "stakingFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "delegateFee",
                  "type": "uint256"
                }
              ],
              "name": "poolSanityChecks",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferByCustodianChecks",
              "outputs": [],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "globals",
                  "type": "IMapleGlobals"
                },
                {
                  "internalType": "uint256",
                  "name": "principalOut",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                }
              ],
              "name": "validateDeactivation",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "612961610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106101155760003560e01c8063681cb10a116100ac578063abbedb401161007b578063abbedb40146103ef578063bf36f0e914610425578063c374682514610448578063ee7375be146104a7578063fbecb171146104e557610115565b8063681cb10a146102f15780636a1460241461032f578063767f503814610337578063a89d5ddb146103aa57610115565b8063297e7bf7116100e8578063297e7bf71461021957806333a581d2146102515780633faa6c5d1461026b5780634119bdfa146102b957610115565b80630715b0901461011a5780631498516814610181578063174a5be4146101c55780631b4c9031146101e3575b600080fd5b81801561012657600080fd5b506101636004803603608081101561013d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561053e565b60408051938452602084019290925282820152519081900360600190f35b6101c3600480360360a081101561019757600080fd5b506001600160a01b038135811691602081013582169160408201351690606081013590608001356109e0565b005b6101cd610db3565b6040805160ff9092168252519081900360200190f35b6101c3600480360360608110156101f957600080fd5b506001600160a01b03813581169160208101359091169060400135610db8565b6101c36004803603608081101561022f57600080fd5b506001600160a01b038135169060208101359060408101359060600135610e5a565b610259610f3a565b60408051918252519081900360200190f35b610293600480360361012081101561028257600080fd5b5060e0810135610100820135610f40565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610259600480360360608110156102cf57600080fd5b506001600160a01b038135811691602081013582169160409091013516610ff1565b6102596004803603608081101561030757600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516611089565b6102596112bc565b61037f600480360360a081101561034d57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608090910135166112c8565b6040805195865260208601949094529115158484015260608401526080830152519081900360a00190f35b8180156103b657600080fd5b506101c3600480360360608110156103cd57600080fd5b506001600160a01b038135811691602081013582169160409091013516611374565b6101c36004803603606081101561040557600080fd5b506001600160a01b0381358116916020810135916040909101351661151d565b6102596004803603604081101561043b57600080fd5b508035906020013561157d565b61048e600480360360a081101561045e57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013590911690608001356115a8565b6040805192835260208301919091528051918290030190f35b610259600480360360808110156104bd57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606001351661192d565b8180156104f157600080fd5b506101c3600480360360c081101561050857600080fd5b508035906001600160a01b0360208201358116916040810135821691606082013581169160808101359091169060a00135611993565b60008080848161054f828a8a610ff1565b9050876001600160a01b031663f2d5d56b30846001600160a01b03166370a082318c6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156105b757600080fd5b505afa1580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b038d1692506370a0823191602480820192602092909190829003018186803b15801561069357600080fd5b505afa1580156106a7573d6000803e3d6000fd5b505050506040513d60208110156106bd57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561070b57600080fd5b505afa15801561071f573d6000803e3d6000fd5b505050506040513d602081101561073557600080fd5b505190506001600160a01b0384166302c967488c8a8610156107575785610759565b8a5b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156107b057600080fd5b505af11580156107c4573d6000803e3d6000fd5b505050506040513d60208110156107da57600080fd5b5050604080516370a0823160e01b815230600482015290516001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561082257600080fd5b505afa158015610836573d6000803e3d6000fd5b505050506040513d602081101561084c57600080fd5b50519550610860818763ffffffff611e5d16565b9650836001600160a01b031663a9059cbb8b886040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b505050506040513d60208110156108ec57600080fd5b5050604080516370a0823160e01b815230600482015290516109729184916001600160a01b038f16916370a08231916024808301926020929190829003018186803b15801561093a57600080fd5b505afa15801561094e573d6000803e3d6000fd5b505050506040513d602081101561096457600080fd5b50519063ffffffff611e5d16565b9450896001600160a01b031663bcd01be7886040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156109ba57600080fd5b505af11580156109ce573d6000803e3d6000fd5b50505050505050509450945094915050565b6040805163434a88c560e11b81526001600160a01b03868116600483015291518592881691638695118a916024808301926020929190829003018186803b158015610a2a57600080fd5b505afa158015610a3e573d6000803e3d6000fd5b505050506040513d6020811015610a5457600080fd5b5051610a9d576040805162461bcd60e51b8152602060048201526013602482015272140e9253959053125117d3125457d054d4d155606a1b604482015290519081900360640190fd5b612710610ab0848463ffffffff611e9f16565b1115610af4576040805162461bcd60e51b815260206004820152600e60248201526d503a494e56414c49445f4645455360901b604482015290519081900360640190fd5b856001600160a01b03166372a22d71856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610b4a57600080fd5b505afa158015610b5e573d6000803e3d6000fd5b505050506040513d6020811015610b7457600080fd5b50518015610c635750806001600160a01b0316632f37b624876001600160a01b031663a05309466040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc557600080fd5b505afa158015610bd9573d6000803e3d6000fd5b505050506040513d6020811015610bef57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152516024808301926020929190829003018186803b158015610c3657600080fd5b505afa158015610c4a573d6000803e3d6000fd5b505050506040513d6020811015610c6057600080fd5b50515b8015610ced5750806001600160a01b0316632f37b624866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610cc057600080fd5b505afa158015610cd4573d6000803e3d6000fd5b505050506040513d6020811015610cea57600080fd5b50515b8015610d5a5750806001600160a01b0316638d4e40836040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2d57600080fd5b505afa158015610d41573d6000803e3d6000fd5b505050506040513d6020811015610d5757600080fd5b50515b610dab576040805162461bcd60e51b815260206004820152601760248201527f503a494e56414c49445f42414c414e4345525f504f4f4c000000000000000000604482015290519081900360640190fd5b505050505050565b600181565b826001600160a01b0316826001600160a01b031614610e13576040805162461bcd60e51b8152602060048201526012602482015271281d24a72b20a624a22fa922a1a2a4ab22a960711b604482015290519081900360640190fd5b80610e55576040805162461bcd60e51b815260206004820152600d60248201526c140e9253959053125117d05355609a1b604482015290519081900360640190fd5b505050565b6001600160a01b038416610eab576040805162461bcd60e51b8152602060048201526013602482015272281d24a72b20a624a22fa1aaa9aa27a224a0a760691b604482015290519081900360640190fd5b82610eed576040805162461bcd60e51b815260206004820152600d60248201526c140e9253959053125117d05355609a1b604482015290519081900360640190fd5b80821115610f34576040805162461bcd60e51b815260206004820152600f60248201526e503a494e5355465f42414c414e434560881b604482015290519081900360640190fd5b50505050565b60001981565b6000808080610f846060880135610f78612710610f6c8a8c60015b60200201359063ffffffff611ef916565b9063ffffffff611f5216565b9063ffffffff611e9f16565b9350610f98612710610f6c878a6001610f5b565b9250610fb460a0880135610f7860408a013560808b0135611e9f565b9150610fe683610fda610fcf612710610f6c8b8d6001610f5b565b60208b013590611e5d565b9063ffffffff611e5d16565b905093509350935093565b600061107f8484866001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561104e57600080fd5b505afa158015611062573d6000803e3d6000fd5b505050506040513d602081101561107857600080fd5b5051611f94565b90505b9392505050565b6000808590506000836001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156110e757600080fd5b505afa1580156110fb573d6000803e3d6000fd5b505050506040513d602081101561111157600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038a16916318160ddd916004808301926020929190829003018186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d602081101561118357600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b038a8116600483015291519293506000929186169163f8b2cb4f91602480820192602092909190829003018186803b1580156111d557600080fd5b505afa1580156111e9573d6000803e3d6000fd5b505050506040513d60208110156111ff57600080fd5b50516040805163f1b8a9b760e01b81526001600160a01b038b8116600483015291519293506000929187169163f1b8a9b791602480820192602092909190829003018186803b15801561125157600080fd5b505afa158015611265573d6000803e3d6000fd5b505050506040513d602081101561127b57600080fd5b505190506112ae670de0b6b3a7640000610f6c6112988585612340565b6112a28888612340565b9063ffffffff611ef916565b9a9950505050505050505050565b670de0b6b3a764000081565b600080600080600061133f8a898c6001600160a01b0316633106374c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b505161244a565b945061134e89898989896115a8565b909250905061135f8989898961192d565b93508181101592509550955095509550959050565b806001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156113ad57600080fd5b505afa1580156113c1573d6000803e3d6000fd5b505050506040513d60208110156113d757600080fd5b50516001600160a01b03163314611421576040805162461bcd60e51b8152602060048201526009602482015268281d2727aa2fa3a7ab60b91b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03161415801561144b57506001600160a01b03831615155b61148e576040805162461bcd60e51b815260206004820152600f60248201526e281d24a72b20a624a22faa27a5a2a760891b604482015290519081900360640190fd5b604080516370a0823160e01b81523060048201529051610e559133916001600160a01b038716916370a08231916024808301926020929190829003018186803b1580156114da57600080fd5b505afa1580156114ee573d6000803e3d6000fd5b505050506040513d602081101561150457600080fd5b50516001600160a01b038616919063ffffffff61255916565b6115298382606461244a565b821115610e55576040805162461bcd60e51b815260206004820152601760248201527f503a5052494e434950414c5f4f55545354414e44494e47000000000000000000604482015290519081900360640190fd5b600061159f670de0b6b3a7640000610f6c85600a86900a63ffffffff611ef916565b90505b92915050565b60008060008790506000816001600160a01b031663f8b2cb4f896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561160857600080fd5b505afa15801561161c573d6000803e3d6000fd5b505050506040513d602081101561163257600080fd5b505160408051634a46c67360e11b81526001600160a01b038b8116600483015291519293506000929185169163948d8ce691602480820192602092909190829003018186803b15801561168457600080fd5b505afa158015611698573d6000803e3d6000fd5b505050506040513d60208110156116ae57600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d602081101561172057600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0387169163936c3477916004808301926020929190829003018186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d602081101561179257600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156117da57600080fd5b505afa1580156117ee573d6000803e3d6000fd5b505050506040513d602081101561180457600080fd5b5051604080516382f652ad60e01b815260048101889052602481018790526044810186905260648101859052608481018c905260a4810183905290519192506001600160a01b038816916382f652ad9160c480820192602092909190829003018186803b15801561187457600080fd5b505afa158015611888573d6000803e3d6000fd5b505050506040513d602081101561189e57600080fd5b5051604080516370a0823160e01b81526001600160a01b038e811660048301529151929a50908c16916370a0823191602480820192602092909190829003018186803b1580156118ed57600080fd5b505afa158015611901573d6000803e3d6000fd5b505050506040513d602081101561191757600080fd5b5051979d979c50969a5050505050505050505050565b600061198a8585846001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561104e57600080fd5b95945050505050565b6000856001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d60208110156119f857600080fd5b5051604080516303526ce360e21b815290519192506000916001600160a01b03871691630d49b38c916004808301926020929190829003018186803b158015611a4057600080fd5b505afa158015611a54573d6000803e3d6000fd5b505050506040513d6020811015611a6a57600080fd5b50516040805163b53afda760e01b81526001600160a01b03808416600483015291519293509084169163b53afda791602480820192602092909190829003018186803b158015611ab957600080fd5b505afa158015611acd573d6000803e3d6000fd5b505050506040513d6020811015611ae357600080fd5b5051611b25576040805162461bcd60e51b815260206004820152600c60248201526b281d24a72b20a624a22fa62360a11b604482015290519081900360640190fd5b806001600160a01b0316632819cbc2866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b7b57600080fd5b505afa158015611b8f573d6000803e3d6000fd5b505050506040513d6020811015611ba557600080fd5b5051611be6576040805162461bcd60e51b815260206004820152600b60248201526a140e9253959053125117d360aa1b604482015290519081900360640190fd5b604080516313d459fb60e01b81526001600160a01b0389811660048301528681166024830152600160448301529151918416916313d459fb91606480820192602092909190829003018186803b158015611c3f57600080fd5b505afa158015611c53573d6000803e3d6000fd5b505050506040513d6020811015611c6957600080fd5b5051611cac576040805162461bcd60e51b815260206004820152600d60248201526c281d24a72b20a624a22fa2262360991b604482015290519081900360640190fd5b6001600160a01b03808616600090815260208a8152604080832088851684529091529020541680611d9757846001600160a01b03166319eb783a876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611d2f57600080fd5b505af1158015611d43573d6000803e3d6000fd5b505050506040513d6020811015611d5957600080fd5b50516001600160a01b03878116600090815260208c815260408083208a85168452909152902080546001600160a01b03191691831691909117905590505b604080516306a8df3b60e21b81526001600160a01b038881166004830152838116602483015260448201879052915191891691631aa37cec9160648082019260009290919082900301818387803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b5050604080516001600160a01b038581168252602082018990528251908b1694507ff62badb063ea4b26543119fa0f194f8c19665e8c9d635362e24e7681d6cfb6af93509081900390910190a2505050505050505050565b600061159f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125ab565b60008282018381101561159f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611f08575060006115a2565b82820282848281611f1557fe5b041461159f5760405162461bcd60e51b81526004018080602001828103825260218152602001806128e16021913960400191505060405180910390fd5b600061159f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612642565b6000808490506000816001600160a01b031663f8b2cb4f866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ff257600080fd5b505afa158015612006573d6000803e3d6000fd5b505050506040513d602081101561201c57600080fd5b505160408051634a46c67360e11b81526001600160a01b03888116600483015291519293506000929185169163948d8ce691602480820192602092909190829003018186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d602081101561209857600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b1580156120e057600080fd5b505afa1580156120f4573d6000803e3d6000fd5b505050506040513d602081101561210a57600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0387169163936c3477916004808301926020929190829003018186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d602081101561217c57600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156121c457600080fd5b505afa1580156121d8573d6000803e3d6000fd5b505050506040513d60208110156121ee57600080fd5b505160408051634494c00960e11b815260048101889052602481018790526044810186905260648101859052608481018b905260a4810183905290519192506000916001600160a01b0389169163892980129160c4808301926020929190829003018186803b15801561226057600080fd5b505afa158015612274573d6000803e3d6000fd5b505050506040513d602081101561228a57600080fd5b505160408051634c97154960e11b8152905191925060009161231e91670de0b6b3a764000091610f6c916001600160a01b038d169163992e2a9291600480820192602092909190829003018186803b1580156122e557600080fd5b505afa1580156122f9573d6000803e3d6000fd5b505050506040513d602081101561230f57600080fd5b50518a9063ffffffff611ef916565b90508082111561232e5780612330565b815b9c9b505050505050505050505050565b600081612381576040805162461bcd60e51b815260206004820152600a602482015269503a4449565f5a45524f60b01b604482015290519081900360640190fd5b670de0b6b3a764000083028315806123a95750670de0b6b3a76400008482816123a657fe5b04145b6123eb576040805162461bcd60e51b815260206004820152600e60248201526d140e91125597d25395115493905360921b604482015290519081900360640190fd5b60028304810181811015612437576040805162461bcd60e51b815260206004820152600e60248201526d140e91125597d25395115493905360921b604482015290519081900360640190fd5b83818161244057fe5b0495945050505050565b600061107f846001600160a01b03166316345f18856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156124a557600080fd5b505afa1580156124b9573d6000803e3d6000fd5b505050506040513d60208110156124cf57600080fd5b50516040805163313ce56760e01b81529051610f6c916001600160a01b0388169163313ce56791600480820192602092909190829003018186803b15801561251657600080fd5b505afa15801561252a573d6000803e3d6000fd5b505050506040513d602081101561254057600080fd5b5051600a0a6112a2866305f5e10063ffffffff611ef916565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610e5590849061269d565b6000818484111561263a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125ff5781810151838201526020016125e7565b50505050905090810190601f16801561262c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836126915760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125ff5781810151838201526020016125e7565b50600083858161244057fe5b60606126f2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661274e9092919063ffffffff16565b805190915015610e555780806020019051602081101561271157600080fd5b5051610e555760405162461bcd60e51b815260040180806020018281038252602a815260200180612902602a913960400191505060405180910390fd5b606061107f84846000858561276285612874565b6127b3576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106127f25780518252601f1990920191602091820191016127d3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612854576040519150601f19603f3d011682016040523d82523d6000602084013e612859565b606091505b509150915061286982828661287a565b979650505050505050565b3b151590565b60608315612889575081611082565b8251156128995782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156125ff5781810151838201526020016125e756fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122017d24e80e9f2c493aa975dabb47320e31184521a2ce0243f4055a880c9e3010964736f6c634300060b0033",
              "opcodes": "PUSH2 0x2961 PUSH2 0x26 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x19 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x115 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x681CB10A GT PUSH2 0xAC JUMPI DUP1 PUSH4 0xABBEDB40 GT PUSH2 0x7B JUMPI DUP1 PUSH4 0xABBEDB40 EQ PUSH2 0x3EF JUMPI DUP1 PUSH4 0xBF36F0E9 EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0xC3746825 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0xEE7375BE EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0xFBECB171 EQ PUSH2 0x4E5 JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x681CB10A EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x6A146024 EQ PUSH2 0x32F JUMPI DUP1 PUSH4 0x767F5038 EQ PUSH2 0x337 JUMPI DUP1 PUSH4 0xA89D5DDB EQ PUSH2 0x3AA JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x297E7BF7 GT PUSH2 0xE8 JUMPI DUP1 PUSH4 0x297E7BF7 EQ PUSH2 0x219 JUMPI DUP1 PUSH4 0x33A581D2 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x3FAA6C5D EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x4119BDFA EQ PUSH2 0x2B9 JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x715B090 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x14985168 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x174A5BE4 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0x1B4C9031 EQ PUSH2 0x1E3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x53E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 DUP3 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x9E0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1CD PUSH2 0xDB3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xDB8 JUMP JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0xE5A JUMP JUMPDEST PUSH2 0x259 PUSH2 0xF3A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x293 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x120 DUP2 LT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP2 ADD CALLDATALOAD PUSH2 0x100 DUP3 ADD CALLDATALOAD PUSH2 0xF40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 RETURN JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0xFF1 JUMP JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x1089 JUMP JUMPDEST PUSH2 0x259 PUSH2 0x12BC JUMP JUMPDEST PUSH2 0x37F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x12C8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP2 ISZERO ISZERO DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x3B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x1374 JUMP JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x151D JUMP JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x43B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x157D JUMP JUMPDEST PUSH2 0x48E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x15A8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x192D JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x40 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x60 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0xA0 ADD CALLDATALOAD PUSH2 0x1993 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP5 DUP2 PUSH2 0x54F DUP3 DUP11 DUP11 PUSH2 0xFF1 JUMP JUMPDEST SWAP1 POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF2D5D56B ADDRESS DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP13 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x631 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x645 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND SWAP3 POP PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x70B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x71F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x735 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH4 0x2C96748 DUP13 DUP11 DUP7 LT ISZERO PUSH2 0x757 JUMPI DUP6 PUSH2 0x759 JUMP JUMPDEST DUP11 JUMPDEST DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x836 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x84C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 POP PUSH2 0x860 DUP2 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP7 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP12 DUP9 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x972 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x93A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x94E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x964 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP5 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xBCD01BE7 DUP9 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x434A88C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD DUP6 SWAP3 DUP9 AND SWAP2 PUSH4 0x8695118A SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA3E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xA9D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x140E9253959053125117D3125457D054D4D155 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2710 PUSH2 0xAB0 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1E9F AND JUMP JUMPDEST GT ISZERO PUSH2 0xAF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x503A494E56414C49445F46454553 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x72A22D71 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP1 ISZERO PUSH2 0xC63 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F37B624 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA0530946 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBD9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE MLOAD PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC4A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST DUP1 ISZERO PUSH2 0xCED JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F37B624 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xCEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST DUP1 ISZERO PUSH2 0xD5A JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8D4E4083 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x503A494E56414C49445F42414C414E4345525F504F4F4C000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xE13 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x281D24A72B20A624A22FA922A1A2A4AB22A9 PUSH1 0x71 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xE55 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x140E9253959053125117D05355 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xEAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x281D24A72B20A624A22FA1AAA9AA27A224A0A7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH2 0xEED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x140E9253959053125117D05355 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF34 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x503A494E5355465F42414C414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0xF84 PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0xF78 PUSH2 0x2710 PUSH2 0xF6C DUP11 DUP13 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1F52 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E9F AND JUMP JUMPDEST SWAP4 POP PUSH2 0xF98 PUSH2 0x2710 PUSH2 0xF6C DUP8 DUP11 PUSH1 0x1 PUSH2 0xF5B JUMP JUMPDEST SWAP3 POP PUSH2 0xFB4 PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH2 0xF78 PUSH1 0x40 DUP11 ADD CALLDATALOAD PUSH1 0x80 DUP12 ADD CALLDATALOAD PUSH2 0x1E9F JUMP JUMPDEST SWAP2 POP PUSH2 0xFE6 DUP4 PUSH2 0xFDA PUSH2 0xFCF PUSH2 0x2710 PUSH2 0xF6C DUP12 DUP14 PUSH1 0x1 PUSH2 0xF5B JUMP JUMPDEST PUSH1 0x20 DUP12 ADD CALLDATALOAD SWAP1 PUSH2 0x1E5D JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP1 POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107F DUP5 DUP5 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1062 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1078 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1F94 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x116D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF8B2CB4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH4 0xF8B2CB4F SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF1B8A9B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP8 AND SWAP2 PUSH4 0xF1B8A9B7 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1265 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x127B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x12AE PUSH8 0xDE0B6B3A7640000 PUSH2 0xF6C PUSH2 0x1298 DUP6 DUP6 PUSH2 0x2340 JUMP JUMPDEST PUSH2 0x12A2 DUP9 DUP9 PUSH2 0x2340 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x133F DUP11 DUP10 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3106374C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x130E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1322 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x244A JUMP JUMPDEST SWAP5 POP PUSH2 0x134E DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x15A8 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x135F DUP10 DUP10 DUP10 DUP10 PUSH2 0x192D JUMP JUMPDEST SWAP4 POP DUP2 DUP2 LT ISZERO SWAP3 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC340A24 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1421 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x281D2727AA2FA3A7AB PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x144B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST PUSH2 0x148E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x281D24A72B20A624A22FAA27A5A2A7 PUSH1 0x89 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0xE55 SWAP2 CALLER SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1504 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2559 AND JUMP JUMPDEST PUSH2 0x1529 DUP4 DUP3 PUSH1 0x64 PUSH2 0x244A JUMP JUMPDEST DUP3 GT ISZERO PUSH2 0xE55 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x503A5052494E434950414C5F4F55545354414E44494E47000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x159F PUSH8 0xDE0B6B3A7640000 PUSH2 0xF6C DUP6 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF8B2CB4F DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x161C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1632 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4A46C673 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP6 AND SWAP2 PUSH4 0x948D8CE6 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1698 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x170A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1720 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x936C3477 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x936C3477 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1768 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x177C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1792 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1A995BED PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0xD4CADF68 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x82F652AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP13 SWAP1 MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x82F652AD SWAP2 PUSH1 0xC4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1888 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x189E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP11 POP SWAP1 DUP13 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1901 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP8 SWAP14 SWAP8 SWAP13 POP SWAP7 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x198A DUP6 DUP6 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3526CE3 PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0xD49B38C SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xB53AFDA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP SWAP1 DUP5 AND SWAP2 PUSH4 0xB53AFDA7 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ACD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1B25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x281D24A72B20A624A22FA623 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2819CBC2 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1BE6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x140E9253959053125117D3 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x13D459FB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP5 AND SWAP2 PUSH4 0x13D459FB SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1CAC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x281D24A72B20A624A22FA22623 PUSH1 0x99 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND DUP1 PUSH2 0x1D97 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x19EB783A DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP11 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x6A8DF3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP8 SWAP1 MSTORE SWAP2 MLOAD SWAP2 DUP10 AND SWAP2 PUSH4 0x1AA37CEC SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E05 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD SWAP1 DUP12 AND SWAP5 POP PUSH32 0xF62BADB063EA4B26543119FA0F194F8C19665E8C9D635362E24E7681D6CFB6AF SWAP4 POP SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x159F DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x25AB JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x159F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F08 JUMPI POP PUSH1 0x0 PUSH2 0x15A2 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1F15 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x159F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x28E1 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x159F DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x2642 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF8B2CB4F DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2006 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x201C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4A46C673 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP6 AND SWAP2 PUSH4 0x948D8CE6 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x206E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2082 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2098 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x210A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x936C3477 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x936C3477 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2166 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x217C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1A995BED PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0xD4CADF68 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4494C009 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x89298012 SWAP2 PUSH1 0xC4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2274 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x228A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4C971549 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x231E SWAP2 PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0xF6C SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND SWAP2 PUSH4 0x992E2A92 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x230F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP11 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x232E JUMPI DUP1 PUSH2 0x2330 JUMP JUMPDEST DUP2 JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x2381 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x503A4449565F5A45524F PUSH1 0xB0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 MUL DUP4 ISZERO DUP1 PUSH2 0x23A9 JUMPI POP PUSH8 0xDE0B6B3A7640000 DUP5 DUP3 DUP2 PUSH2 0x23A6 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x23EB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E91125597D253951154939053 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP4 DIV DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0x2437 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E91125597D253951154939053 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 DUP2 DUP2 PUSH2 0x2440 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107F DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16345F18 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH2 0xF6C SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x252A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2540 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xA EXP PUSH2 0x12A2 DUP7 PUSH4 0x5F5E100 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0xE55 SWAP1 DUP5 SWAP1 PUSH2 0x269D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x263A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x262C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2691 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x2440 JUMPI INVALID JUMPDEST PUSH1 0x60 PUSH2 0x26F2 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0xE55 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2711 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xE55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2902 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x107F DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x2762 DUP6 PUSH2 0x2874 JUMP JUMPDEST PUSH2 0x27B3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x27F2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x27D3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2854 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2859 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2869 DUP3 DUP3 DUP7 PUSH2 0x287A JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2889 JUMPI POP DUP2 PUSH2 0x1082 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x2899 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP5 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP5 MLOAD DUP6 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77536166654552433230 GASPRICE KECCAK256 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x756363656564A264697066735822122017D24E80 0xE9 CALLCODE 0xC4 SWAP4 0xAA SWAP8 0x5D 0xAB 0xB4 PUSH20 0x20E31184521A2CE0243F4055A880C9E301096473 PUSH16 0x6C634300060B00330000000000000000 ",
              "sourceMap": "148331:22302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600436106101155760003560e01c8063681cb10a116100ac578063abbedb401161007b578063abbedb40146103ef578063bf36f0e914610425578063c374682514610448578063ee7375be146104a7578063fbecb171146104e557610115565b8063681cb10a146102f15780636a1460241461032f578063767f503814610337578063a89d5ddb146103aa57610115565b8063297e7bf7116100e8578063297e7bf71461021957806333a581d2146102515780633faa6c5d1461026b5780634119bdfa146102b957610115565b80630715b0901461011a5780631498516814610181578063174a5be4146101c55780631b4c9031146101e3575b600080fd5b81801561012657600080fd5b506101636004803603608081101561013d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561053e565b60408051938452602084019290925282820152519081900360600190f35b6101c3600480360360a081101561019757600080fd5b506001600160a01b038135811691602081013582169160408201351690606081013590608001356109e0565b005b6101cd610db3565b6040805160ff9092168252519081900360200190f35b6101c3600480360360608110156101f957600080fd5b506001600160a01b03813581169160208101359091169060400135610db8565b6101c36004803603608081101561022f57600080fd5b506001600160a01b038135169060208101359060408101359060600135610e5a565b610259610f3a565b60408051918252519081900360200190f35b610293600480360361012081101561028257600080fd5b5060e0810135610100820135610f40565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610259600480360360608110156102cf57600080fd5b506001600160a01b038135811691602081013582169160409091013516610ff1565b6102596004803603608081101561030757600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516611089565b6102596112bc565b61037f600480360360a081101561034d57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608090910135166112c8565b6040805195865260208601949094529115158484015260608401526080830152519081900360a00190f35b8180156103b657600080fd5b506101c3600480360360608110156103cd57600080fd5b506001600160a01b038135811691602081013582169160409091013516611374565b6101c36004803603606081101561040557600080fd5b506001600160a01b0381358116916020810135916040909101351661151d565b6102596004803603604081101561043b57600080fd5b508035906020013561157d565b61048e600480360360a081101561045e57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013590911690608001356115a8565b6040805192835260208301919091528051918290030190f35b610259600480360360808110156104bd57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606001351661192d565b8180156104f157600080fd5b506101c3600480360360c081101561050857600080fd5b508035906001600160a01b0360208201358116916040810135821691606082013581169160808101359091169060a00135611993565b60008080848161054f828a8a610ff1565b9050876001600160a01b031663f2d5d56b30846001600160a01b03166370a082318c6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156105b757600080fd5b505afa1580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b038d1692506370a0823191602480820192602092909190829003018186803b15801561069357600080fd5b505afa1580156106a7573d6000803e3d6000fd5b505050506040513d60208110156106bd57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561070b57600080fd5b505afa15801561071f573d6000803e3d6000fd5b505050506040513d602081101561073557600080fd5b505190506001600160a01b0384166302c967488c8a8610156107575785610759565b8a5b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156107b057600080fd5b505af11580156107c4573d6000803e3d6000fd5b505050506040513d60208110156107da57600080fd5b5050604080516370a0823160e01b815230600482015290516001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561082257600080fd5b505afa158015610836573d6000803e3d6000fd5b505050506040513d602081101561084c57600080fd5b50519550610860818763ffffffff611e5d16565b9650836001600160a01b031663a9059cbb8b886040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b505050506040513d60208110156108ec57600080fd5b5050604080516370a0823160e01b815230600482015290516109729184916001600160a01b038f16916370a08231916024808301926020929190829003018186803b15801561093a57600080fd5b505afa15801561094e573d6000803e3d6000fd5b505050506040513d602081101561096457600080fd5b50519063ffffffff611e5d16565b9450896001600160a01b031663bcd01be7886040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156109ba57600080fd5b505af11580156109ce573d6000803e3d6000fd5b50505050505050509450945094915050565b6040805163434a88c560e11b81526001600160a01b03868116600483015291518592881691638695118a916024808301926020929190829003018186803b158015610a2a57600080fd5b505afa158015610a3e573d6000803e3d6000fd5b505050506040513d6020811015610a5457600080fd5b5051610a9d576040805162461bcd60e51b8152602060048201526013602482015272140e9253959053125117d3125457d054d4d155606a1b604482015290519081900360640190fd5b612710610ab0848463ffffffff611e9f16565b1115610af4576040805162461bcd60e51b815260206004820152600e60248201526d503a494e56414c49445f4645455360901b604482015290519081900360640190fd5b856001600160a01b03166372a22d71856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610b4a57600080fd5b505afa158015610b5e573d6000803e3d6000fd5b505050506040513d6020811015610b7457600080fd5b50518015610c635750806001600160a01b0316632f37b624876001600160a01b031663a05309466040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc557600080fd5b505afa158015610bd9573d6000803e3d6000fd5b505050506040513d6020811015610bef57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152516024808301926020929190829003018186803b158015610c3657600080fd5b505afa158015610c4a573d6000803e3d6000fd5b505050506040513d6020811015610c6057600080fd5b50515b8015610ced5750806001600160a01b0316632f37b624866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610cc057600080fd5b505afa158015610cd4573d6000803e3d6000fd5b505050506040513d6020811015610cea57600080fd5b50515b8015610d5a5750806001600160a01b0316638d4e40836040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2d57600080fd5b505afa158015610d41573d6000803e3d6000fd5b505050506040513d6020811015610d5757600080fd5b50515b610dab576040805162461bcd60e51b815260206004820152601760248201527f503a494e56414c49445f42414c414e4345525f504f4f4c000000000000000000604482015290519081900360640190fd5b505050505050565b600181565b826001600160a01b0316826001600160a01b031614610e13576040805162461bcd60e51b8152602060048201526012602482015271281d24a72b20a624a22fa922a1a2a4ab22a960711b604482015290519081900360640190fd5b80610e55576040805162461bcd60e51b815260206004820152600d60248201526c140e9253959053125117d05355609a1b604482015290519081900360640190fd5b505050565b6001600160a01b038416610eab576040805162461bcd60e51b8152602060048201526013602482015272281d24a72b20a624a22fa1aaa9aa27a224a0a760691b604482015290519081900360640190fd5b82610eed576040805162461bcd60e51b815260206004820152600d60248201526c140e9253959053125117d05355609a1b604482015290519081900360640190fd5b80821115610f34576040805162461bcd60e51b815260206004820152600f60248201526e503a494e5355465f42414c414e434560881b604482015290519081900360640190fd5b50505050565b60001981565b6000808080610f846060880135610f78612710610f6c8a8c60015b60200201359063ffffffff611ef916565b9063ffffffff611f5216565b9063ffffffff611e9f16565b9350610f98612710610f6c878a6001610f5b565b9250610fb460a0880135610f7860408a013560808b0135611e9f565b9150610fe683610fda610fcf612710610f6c8b8d6001610f5b565b60208b013590611e5d565b9063ffffffff611e5d16565b905093509350935093565b600061107f8484866001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561104e57600080fd5b505afa158015611062573d6000803e3d6000fd5b505050506040513d602081101561107857600080fd5b5051611f94565b90505b9392505050565b6000808590506000836001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156110e757600080fd5b505afa1580156110fb573d6000803e3d6000fd5b505050506040513d602081101561111157600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038a16916318160ddd916004808301926020929190829003018186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d602081101561118357600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b038a8116600483015291519293506000929186169163f8b2cb4f91602480820192602092909190829003018186803b1580156111d557600080fd5b505afa1580156111e9573d6000803e3d6000fd5b505050506040513d60208110156111ff57600080fd5b50516040805163f1b8a9b760e01b81526001600160a01b038b8116600483015291519293506000929187169163f1b8a9b791602480820192602092909190829003018186803b15801561125157600080fd5b505afa158015611265573d6000803e3d6000fd5b505050506040513d602081101561127b57600080fd5b505190506112ae670de0b6b3a7640000610f6c6112988585612340565b6112a28888612340565b9063ffffffff611ef916565b9a9950505050505050505050565b670de0b6b3a764000081565b600080600080600061133f8a898c6001600160a01b0316633106374c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b505161244a565b945061134e89898989896115a8565b909250905061135f8989898961192d565b93508181101592509550955095509550959050565b806001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156113ad57600080fd5b505afa1580156113c1573d6000803e3d6000fd5b505050506040513d60208110156113d757600080fd5b50516001600160a01b03163314611421576040805162461bcd60e51b8152602060048201526009602482015268281d2727aa2fa3a7ab60b91b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03161415801561144b57506001600160a01b03831615155b61148e576040805162461bcd60e51b815260206004820152600f60248201526e281d24a72b20a624a22faa27a5a2a760891b604482015290519081900360640190fd5b604080516370a0823160e01b81523060048201529051610e559133916001600160a01b038716916370a08231916024808301926020929190829003018186803b1580156114da57600080fd5b505afa1580156114ee573d6000803e3d6000fd5b505050506040513d602081101561150457600080fd5b50516001600160a01b038616919063ffffffff61255916565b6115298382606461244a565b821115610e55576040805162461bcd60e51b815260206004820152601760248201527f503a5052494e434950414c5f4f55545354414e44494e47000000000000000000604482015290519081900360640190fd5b600061159f670de0b6b3a7640000610f6c85600a86900a63ffffffff611ef916565b90505b92915050565b60008060008790506000816001600160a01b031663f8b2cb4f896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561160857600080fd5b505afa15801561161c573d6000803e3d6000fd5b505050506040513d602081101561163257600080fd5b505160408051634a46c67360e11b81526001600160a01b038b8116600483015291519293506000929185169163948d8ce691602480820192602092909190829003018186803b15801561168457600080fd5b505afa158015611698573d6000803e3d6000fd5b505050506040513d60208110156116ae57600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d602081101561172057600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0387169163936c3477916004808301926020929190829003018186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d602081101561179257600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156117da57600080fd5b505afa1580156117ee573d6000803e3d6000fd5b505050506040513d602081101561180457600080fd5b5051604080516382f652ad60e01b815260048101889052602481018790526044810186905260648101859052608481018c905260a4810183905290519192506001600160a01b038816916382f652ad9160c480820192602092909190829003018186803b15801561187457600080fd5b505afa158015611888573d6000803e3d6000fd5b505050506040513d602081101561189e57600080fd5b5051604080516370a0823160e01b81526001600160a01b038e811660048301529151929a50908c16916370a0823191602480820192602092909190829003018186803b1580156118ed57600080fd5b505afa158015611901573d6000803e3d6000fd5b505050506040513d602081101561191757600080fd5b5051979d979c50969a5050505050505050505050565b600061198a8585846001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561104e57600080fd5b95945050505050565b6000856001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d60208110156119f857600080fd5b5051604080516303526ce360e21b815290519192506000916001600160a01b03871691630d49b38c916004808301926020929190829003018186803b158015611a4057600080fd5b505afa158015611a54573d6000803e3d6000fd5b505050506040513d6020811015611a6a57600080fd5b50516040805163b53afda760e01b81526001600160a01b03808416600483015291519293509084169163b53afda791602480820192602092909190829003018186803b158015611ab957600080fd5b505afa158015611acd573d6000803e3d6000fd5b505050506040513d6020811015611ae357600080fd5b5051611b25576040805162461bcd60e51b815260206004820152600c60248201526b281d24a72b20a624a22fa62360a11b604482015290519081900360640190fd5b806001600160a01b0316632819cbc2866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b7b57600080fd5b505afa158015611b8f573d6000803e3d6000fd5b505050506040513d6020811015611ba557600080fd5b5051611be6576040805162461bcd60e51b815260206004820152600b60248201526a140e9253959053125117d360aa1b604482015290519081900360640190fd5b604080516313d459fb60e01b81526001600160a01b0389811660048301528681166024830152600160448301529151918416916313d459fb91606480820192602092909190829003018186803b158015611c3f57600080fd5b505afa158015611c53573d6000803e3d6000fd5b505050506040513d6020811015611c6957600080fd5b5051611cac576040805162461bcd60e51b815260206004820152600d60248201526c281d24a72b20a624a22fa2262360991b604482015290519081900360640190fd5b6001600160a01b03808616600090815260208a8152604080832088851684529091529020541680611d9757846001600160a01b03166319eb783a876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611d2f57600080fd5b505af1158015611d43573d6000803e3d6000fd5b505050506040513d6020811015611d5957600080fd5b50516001600160a01b03878116600090815260208c815260408083208a85168452909152902080546001600160a01b03191691831691909117905590505b604080516306a8df3b60e21b81526001600160a01b038881166004830152838116602483015260448201879052915191891691631aa37cec9160648082019260009290919082900301818387803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b5050604080516001600160a01b038581168252602082018990528251908b1694507ff62badb063ea4b26543119fa0f194f8c19665e8c9d635362e24e7681d6cfb6af93509081900390910190a2505050505050505050565b600061159f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125ab565b60008282018381101561159f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611f08575060006115a2565b82820282848281611f1557fe5b041461159f5760405162461bcd60e51b81526004018080602001828103825260218152602001806128e16021913960400191505060405180910390fd5b600061159f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612642565b6000808490506000816001600160a01b031663f8b2cb4f866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ff257600080fd5b505afa158015612006573d6000803e3d6000fd5b505050506040513d602081101561201c57600080fd5b505160408051634a46c67360e11b81526001600160a01b03888116600483015291519293506000929185169163948d8ce691602480820192602092909190829003018186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d602081101561209857600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b1580156120e057600080fd5b505afa1580156120f4573d6000803e3d6000fd5b505050506040513d602081101561210a57600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0387169163936c3477916004808301926020929190829003018186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d602081101561217c57600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156121c457600080fd5b505afa1580156121d8573d6000803e3d6000fd5b505050506040513d60208110156121ee57600080fd5b505160408051634494c00960e11b815260048101889052602481018790526044810186905260648101859052608481018b905260a4810183905290519192506000916001600160a01b0389169163892980129160c4808301926020929190829003018186803b15801561226057600080fd5b505afa158015612274573d6000803e3d6000fd5b505050506040513d602081101561228a57600080fd5b505160408051634c97154960e11b8152905191925060009161231e91670de0b6b3a764000091610f6c916001600160a01b038d169163992e2a9291600480820192602092909190829003018186803b1580156122e557600080fd5b505afa1580156122f9573d6000803e3d6000fd5b505050506040513d602081101561230f57600080fd5b50518a9063ffffffff611ef916565b90508082111561232e5780612330565b815b9c9b505050505050505050505050565b600081612381576040805162461bcd60e51b815260206004820152600a602482015269503a4449565f5a45524f60b01b604482015290519081900360640190fd5b670de0b6b3a764000083028315806123a95750670de0b6b3a76400008482816123a657fe5b04145b6123eb576040805162461bcd60e51b815260206004820152600e60248201526d140e91125597d25395115493905360921b604482015290519081900360640190fd5b60028304810181811015612437576040805162461bcd60e51b815260206004820152600e60248201526d140e91125597d25395115493905360921b604482015290519081900360640190fd5b83818161244057fe5b0495945050505050565b600061107f846001600160a01b03166316345f18856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156124a557600080fd5b505afa1580156124b9573d6000803e3d6000fd5b505050506040513d60208110156124cf57600080fd5b50516040805163313ce56760e01b81529051610f6c916001600160a01b0388169163313ce56791600480820192602092909190829003018186803b15801561251657600080fd5b505afa15801561252a573d6000803e3d6000fd5b505050506040513d602081101561254057600080fd5b5051600a0a6112a2866305f5e10063ffffffff611ef916565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610e5590849061269d565b6000818484111561263a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125ff5781810151838201526020016125e7565b50505050905090810190601f16801561262c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836126915760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125ff5781810151838201526020016125e7565b50600083858161244057fe5b60606126f2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661274e9092919063ffffffff16565b805190915015610e555780806020019051602081101561271157600080fd5b5051610e555760405162461bcd60e51b815260040180806020018281038252602a815260200180612902602a913960400191505060405180910390fd5b606061107f84846000858561276285612874565b6127b3576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106127f25780518252601f1990920191602091820191016127d3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612854576040519150601f19603f3d011682016040523d82523d6000602084013e612859565b606091505b509150915061286982828661287a565b979650505050505050565b3b151590565b60608315612889575081611082565b8251156128995782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156125ff5781810151838201526020016125e756fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122017d24e80e9f2c493aa975dabb47320e31184521a2ce0243f4055a880c9e3010964736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x115 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x681CB10A GT PUSH2 0xAC JUMPI DUP1 PUSH4 0xABBEDB40 GT PUSH2 0x7B JUMPI DUP1 PUSH4 0xABBEDB40 EQ PUSH2 0x3EF JUMPI DUP1 PUSH4 0xBF36F0E9 EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0xC3746825 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0xEE7375BE EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0xFBECB171 EQ PUSH2 0x4E5 JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x681CB10A EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x6A146024 EQ PUSH2 0x32F JUMPI DUP1 PUSH4 0x767F5038 EQ PUSH2 0x337 JUMPI DUP1 PUSH4 0xA89D5DDB EQ PUSH2 0x3AA JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x297E7BF7 GT PUSH2 0xE8 JUMPI DUP1 PUSH4 0x297E7BF7 EQ PUSH2 0x219 JUMPI DUP1 PUSH4 0x33A581D2 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x3FAA6C5D EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x4119BDFA EQ PUSH2 0x2B9 JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x715B090 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x14985168 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x174A5BE4 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0x1B4C9031 EQ PUSH2 0x1E3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x53E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 DUP3 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x9E0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1CD PUSH2 0xDB3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xDB8 JUMP JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0xE5A JUMP JUMPDEST PUSH2 0x259 PUSH2 0xF3A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x293 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x120 DUP2 LT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP2 ADD CALLDATALOAD PUSH2 0x100 DUP3 ADD CALLDATALOAD PUSH2 0xF40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 RETURN JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0xFF1 JUMP JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x1089 JUMP JUMPDEST PUSH2 0x259 PUSH2 0x12BC JUMP JUMPDEST PUSH2 0x37F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x12C8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP2 ISZERO ISZERO DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x3B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x1374 JUMP JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x151D JUMP JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x43B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x157D JUMP JUMPDEST PUSH2 0x48E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x15A8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x192D JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x40 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x60 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0xA0 ADD CALLDATALOAD PUSH2 0x1993 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP5 DUP2 PUSH2 0x54F DUP3 DUP11 DUP11 PUSH2 0xFF1 JUMP JUMPDEST SWAP1 POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF2D5D56B ADDRESS DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP13 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x631 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x645 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND SWAP3 POP PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x70B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x71F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x735 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH4 0x2C96748 DUP13 DUP11 DUP7 LT ISZERO PUSH2 0x757 JUMPI DUP6 PUSH2 0x759 JUMP JUMPDEST DUP11 JUMPDEST DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x836 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x84C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 POP PUSH2 0x860 DUP2 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP7 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP12 DUP9 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x972 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x93A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x94E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x964 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP5 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xBCD01BE7 DUP9 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x434A88C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD DUP6 SWAP3 DUP9 AND SWAP2 PUSH4 0x8695118A SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA3E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xA9D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x140E9253959053125117D3125457D054D4D155 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2710 PUSH2 0xAB0 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1E9F AND JUMP JUMPDEST GT ISZERO PUSH2 0xAF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x503A494E56414C49445F46454553 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x72A22D71 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP1 ISZERO PUSH2 0xC63 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F37B624 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA0530946 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBD9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE MLOAD PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC4A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST DUP1 ISZERO PUSH2 0xCED JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F37B624 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xCEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST DUP1 ISZERO PUSH2 0xD5A JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8D4E4083 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x503A494E56414C49445F42414C414E4345525F504F4F4C000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xE13 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x281D24A72B20A624A22FA922A1A2A4AB22A9 PUSH1 0x71 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xE55 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x140E9253959053125117D05355 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xEAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x281D24A72B20A624A22FA1AAA9AA27A224A0A7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH2 0xEED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x140E9253959053125117D05355 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF34 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x503A494E5355465F42414C414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0xF84 PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0xF78 PUSH2 0x2710 PUSH2 0xF6C DUP11 DUP13 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1F52 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E9F AND JUMP JUMPDEST SWAP4 POP PUSH2 0xF98 PUSH2 0x2710 PUSH2 0xF6C DUP8 DUP11 PUSH1 0x1 PUSH2 0xF5B JUMP JUMPDEST SWAP3 POP PUSH2 0xFB4 PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH2 0xF78 PUSH1 0x40 DUP11 ADD CALLDATALOAD PUSH1 0x80 DUP12 ADD CALLDATALOAD PUSH2 0x1E9F JUMP JUMPDEST SWAP2 POP PUSH2 0xFE6 DUP4 PUSH2 0xFDA PUSH2 0xFCF PUSH2 0x2710 PUSH2 0xF6C DUP12 DUP14 PUSH1 0x1 PUSH2 0xF5B JUMP JUMPDEST PUSH1 0x20 DUP12 ADD CALLDATALOAD SWAP1 PUSH2 0x1E5D JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP1 POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107F DUP5 DUP5 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1062 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1078 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1F94 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x116D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF8B2CB4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH4 0xF8B2CB4F SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF1B8A9B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP8 AND SWAP2 PUSH4 0xF1B8A9B7 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1265 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x127B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x12AE PUSH8 0xDE0B6B3A7640000 PUSH2 0xF6C PUSH2 0x1298 DUP6 DUP6 PUSH2 0x2340 JUMP JUMPDEST PUSH2 0x12A2 DUP9 DUP9 PUSH2 0x2340 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x133F DUP11 DUP10 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3106374C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x130E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1322 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x244A JUMP JUMPDEST SWAP5 POP PUSH2 0x134E DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x15A8 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x135F DUP10 DUP10 DUP10 DUP10 PUSH2 0x192D JUMP JUMPDEST SWAP4 POP DUP2 DUP2 LT ISZERO SWAP3 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC340A24 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1421 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x281D2727AA2FA3A7AB PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x144B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST PUSH2 0x148E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x281D24A72B20A624A22FAA27A5A2A7 PUSH1 0x89 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0xE55 SWAP2 CALLER SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1504 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2559 AND JUMP JUMPDEST PUSH2 0x1529 DUP4 DUP3 PUSH1 0x64 PUSH2 0x244A JUMP JUMPDEST DUP3 GT ISZERO PUSH2 0xE55 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x503A5052494E434950414C5F4F55545354414E44494E47000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x159F PUSH8 0xDE0B6B3A7640000 PUSH2 0xF6C DUP6 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF8B2CB4F DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x161C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1632 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4A46C673 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP6 AND SWAP2 PUSH4 0x948D8CE6 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1698 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x170A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1720 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x936C3477 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x936C3477 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1768 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x177C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1792 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1A995BED PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0xD4CADF68 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x82F652AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP13 SWAP1 MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x82F652AD SWAP2 PUSH1 0xC4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1888 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x189E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP11 POP SWAP1 DUP13 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1901 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP8 SWAP14 SWAP8 SWAP13 POP SWAP7 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x198A DUP6 DUP6 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3526CE3 PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0xD49B38C SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xB53AFDA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP SWAP1 DUP5 AND SWAP2 PUSH4 0xB53AFDA7 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ACD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1B25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x281D24A72B20A624A22FA623 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2819CBC2 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1BE6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x140E9253959053125117D3 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x13D459FB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP5 AND SWAP2 PUSH4 0x13D459FB SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1CAC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x281D24A72B20A624A22FA22623 PUSH1 0x99 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND DUP1 PUSH2 0x1D97 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x19EB783A DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP11 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x6A8DF3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP8 SWAP1 MSTORE SWAP2 MLOAD SWAP2 DUP10 AND SWAP2 PUSH4 0x1AA37CEC SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E05 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD SWAP1 DUP12 AND SWAP5 POP PUSH32 0xF62BADB063EA4B26543119FA0F194F8C19665E8C9D635362E24E7681D6CFB6AF SWAP4 POP SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x159F DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x25AB JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x159F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F08 JUMPI POP PUSH1 0x0 PUSH2 0x15A2 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1F15 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x159F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x28E1 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x159F DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x2642 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF8B2CB4F DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2006 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x201C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4A46C673 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP6 AND SWAP2 PUSH4 0x948D8CE6 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x206E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2082 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2098 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x210A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x936C3477 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x936C3477 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2166 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x217C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1A995BED PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0xD4CADF68 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4494C009 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x89298012 SWAP2 PUSH1 0xC4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2274 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x228A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4C971549 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x231E SWAP2 PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0xF6C SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND SWAP2 PUSH4 0x992E2A92 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x230F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP11 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x232E JUMPI DUP1 PUSH2 0x2330 JUMP JUMPDEST DUP2 JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x2381 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x503A4449565F5A45524F PUSH1 0xB0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 MUL DUP4 ISZERO DUP1 PUSH2 0x23A9 JUMPI POP PUSH8 0xDE0B6B3A7640000 DUP5 DUP3 DUP2 PUSH2 0x23A6 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x23EB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E91125597D253951154939053 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP4 DIV DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0x2437 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E91125597D253951154939053 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 DUP2 DUP2 PUSH2 0x2440 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107F DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16345F18 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH2 0xF6C SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x252A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2540 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xA EXP PUSH2 0x12A2 DUP7 PUSH4 0x5F5E100 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0xE55 SWAP1 DUP5 SWAP1 PUSH2 0x269D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x263A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x262C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2691 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x2440 JUMPI INVALID JUMPDEST PUSH1 0x60 PUSH2 0x26F2 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0xE55 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2711 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xE55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2902 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x107F DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x2762 DUP6 PUSH2 0x2874 JUMP JUMPDEST PUSH2 0x27B3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x27F2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x27D3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2854 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2859 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2869 DUP3 DUP3 DUP7 PUSH2 0x287A JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2889 JUMPI POP DUP2 PUSH2 0x1082 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x2899 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP5 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP5 MLOAD DUP6 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77536166654552433230 GASPRICE KECCAK256 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x756363656564A264697066735822122017D24E80 0xE9 CALLCODE 0xC4 SWAP4 0xAA SWAP8 0x5D 0xAB 0xB4 PUSH20 0x20E31184521A2CE0243F4055A880C9E301096473 PUSH16 0x6C634300060B00330000000000000000 ",
              "sourceMap": "148331:22302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;152718:1724;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;152718:1724:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;149417:705;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;149417:705:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;148526:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;158513:227;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;158513:227:0;;;;;;;;;;;;;;;;;:::i;159155:336::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;159155:336:0;;;;;;;;;;;;;;;;;;:::i;148419:49::-;;;:::i;:::-;;;;;;;;;;;;;;;;155514:908;;;;;;;;;;;;;;;;-1:-1:-1;155514:908:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;163767:255;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;163767:255:0;;;;;;;;;;;;;;;;;;;:::i;161564:968::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;161564:968:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;148474:46::-;;;:::i;168376:865::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;168376:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;159983:336;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;159983:336:0;;;;;;;;;;;;;;;;;;;:::i;156709:227::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;156709:227:0;;;;;;;;;;;;;;;;;:::i;169558:164::-;;;;;;;;;;;;;;;;-1:-1:-1;169558:164:0;;;;;;;:::i;166181:1146::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;166181:1146:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;163050:273;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;163050:273:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;150793:1175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;150793:1175:0;;;-1:-1:-1;;;;;150793:1175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;152718:1724::-;152916:18;;;153071:10;152916:18;153242:71;153071:10;153284:14;153301:11;153242:21;:71::i;:::-;153215:98;;153376:11;-1:-1:-1;;;;;153363:30:0;;153402:4;153409:5;-1:-1:-1;;;;;153409:15:0;;153425:11;153409:28;;;;;;;;;;;;;-1:-1:-1;;;;;153409:28:0;-1:-1:-1;;;;;153409:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;153409:28:0;153363:75;;;-1:-1:-1;;;;;;153363:75:0;;;;;;;-1:-1:-1;;;;;153363:75:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;153363:75:0;;;;;;;-1:-1:-1;153363:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;153559:39:0;;;-1:-1:-1;;;153559:39:0;;153592:4;153559:39;;;;;;153524:32;;-1:-1:-1;;;;;;153559:24:0;;;-1:-1:-1;153559:24:0;;:39;;;;;;;;;;;;;;;:24;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;153559:39:0;153643:30;;;-1:-1:-1;;;153643:30:0;;153667:4;153643:30;;;;;;153559:39;;-1:-1:-1;153608:21:0;;-1:-1:-1;;;;;153643:15:0;;;;;:30;;;;;153559:39;;153643:30;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;153643:30:0;;-1:-1:-1;;;;;;153759:29:0;;;153810:14;153839:35;;;;:72;;153895:16;153839:72;;;153877:15;153839:72;153968:13;153759:232;;;;;;;;;;;;;-1:-1:-1;;;;;153759:232:0;-1:-1:-1;;;;;153759:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;154068:30:0;;;-1:-1:-1;;;154068:30:0;;154092:4;154068:30;;;;;;-1:-1:-1;;;;;154068:15:0;;;;;:30;;;;;153759:232;;154068:30;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;154068:30:0;;-1:-1:-1;154125:33:0;:13;154068:30;154125:33;:17;:33;:::i;:::-;154108:50;;154168:5;-1:-1:-1;;;;;154168:14:0;;154183:11;154196:14;154168:43;;;;;;;;;;;;;-1:-1:-1;;;;;154168:43:0;-1:-1:-1;;;;;154168:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;154255:39:0;;;-1:-1:-1;;;154255:39:0;;154288:4;154255:39;;;;;;:69;;154299:24;;-1:-1:-1;;;;;154255:24:0;;;;;:39;;;;;154168:43;;154255:39;;;;;;;:24;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;154255:39:0;;:69;:43;:69;:::i;:::-;154221:103;;154347:11;-1:-1:-1;;;;;154334:38:0;;154373:10;154334:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;152718:1724;;;;;;;;;;;;:::o;149417:705::-;149673:45;;;-1:-1:-1;;;149673:45:0;;-1:-1:-1;;;;;149673:45:0;;;;;;;;;149643:10;;149673:29;;;;;:45;;;;;;;;;;;;;;:29;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149673:45:0;149665:77;;;;;-1:-1:-1;;;149665:77:0;;;;;;;;;;;;-1:-1:-1;;;149665:77:0;;;;;;;;;;;;;;;149791:6;149760:27;:10;149775:11;149760:27;:14;:27;:::i;:::-;:37;;149752:72;;;;;-1:-1:-1;;;149752:72:0;;;;;;;;;;;;-1:-1:-1;;;149752:72:0;;;;;;;;;;;;;;;149855:7;-1:-1:-1;;;;;149855:27:0;;149891:10;149855:48;;;;;;;;;;;;;-1:-1:-1;;;;;149855:48:0;-1:-1:-1;;;;;149855:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149855:48:0;:92;;;;;149919:5;-1:-1:-1;;;;;149919:13:0;;149933:7;-1:-1:-1;;;;;149933:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149933:13:0;149919:28;;;-1:-1:-1;;;;;;149919:28:0;;;;;;;-1:-1:-1;;;;;149919:28:0;;;;;;;;;;;;;149933:13;;149919:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149919:28:0;149855:92;:157;;;;;149983:5;-1:-1:-1;;;;;149983:13:0;;149997:14;149983:29;;;;;;;;;;;;;-1:-1:-1;;;;;149983:29:0;-1:-1:-1;;;;;149983:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149983:29:0;149855:157;:211;;;;;150047:5;-1:-1:-1;;;;;150047:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;150047:19:0;149855:211;149834:281;;;;;-1:-1:-1;;;149834:281:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;149417:705;;;;;;:::o;148526:39::-;148564:1;148526:39;:::o;158513:227::-;158628:4;-1:-1:-1;;;;;158622:10:0;:2;-1:-1:-1;;;;;158622:10:0;;158614:57;;;;;-1:-1:-1;;;158614:57:0;;;;;;;;;;;;-1:-1:-1;;;158614:57:0;;;;;;;;;;;;;;;158689:20;158681:52;;;;;-1:-1:-1;;;158681:52:0;;;;;;;;;;;;-1:-1:-1;;;158681:52:0;;;;;;;;;;;;;;;158513:227;;;:::o;159155:336::-;-1:-1:-1;;;;;159305:23:0;;159297:59;;;;;-1:-1:-1;;;159297:59:0;;;;;;;;;;;;-1:-1:-1;;;159297:59:0;;;;;;;;;;;;;;;159374:23;159366:53;;;;;-1:-1:-1;;;159366:53:0;;;;;;;;;;;;-1:-1:-1;;;159366:53:0;;;;;;;;;;;;;;;159458:6;159437:17;:27;;159429:55;;;;;-1:-1:-1;;;159429:55:0;;;;;;;;;;;;-1:-1:-1;;;159429:55:0;;;;;;;;;;;;;;;159155:336;;;;:::o;148419:49::-;-1:-1:-1;;148419:49:0;:::o;155514:908::-;155711:27;;;;155896:59;155942:12;;;;155896:41;155930:6;155896:29;155913:11;155942:9;155906:1;155896:12;;;;;;:29;:16;:29;:::i;:::-;:33;:41;:33;:41;:::i;:::-;:45;:59;:45;:59;:::i;:::-;155874:81;-1:-1:-1;156035:40:0;156068:6;156035:28;156052:10;156035:9;156045:1;156035:12;;:40;156013:62;-1:-1:-1;156159:48:0;156194:12;;;;156159:30;:12;;;;156176;;;;156159:16;:30::i;:48::-;156142:65;-1:-1:-1;156310:83:0;156374:18;156310:59;156327:41;156361:6;156327:29;156344:11;156327:9;156337:1;156327:12;;:41;156310:12;;;;;:16;:59::i;:::-;:63;:83;:63;:83;:::i;:::-;156293:100;;155514:908;;;;;;;:::o;163767:255::-;163910:7;163936:79;163953:6;163961:14;163984:6;-1:-1:-1;;;;;163977:24:0;;164002:11;163977:37;;;;;;;;;;;;;-1:-1:-1;;;;;163977:37:0;-1:-1:-1;;;;;163977:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;163977:37:0;163936:16;:79::i;:::-;163929:86;;163767:255;;;;;;:::o;161564:968::-;161718:7;161737:12;161759:6;161737:29;;162000:23;162039:11;-1:-1:-1;;;;;162032:29:0;;162062:6;162032:37;;;;;;;;;;;;;-1:-1:-1;;;;;162032:37:0;-1:-1:-1;;;;;162032:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;162032:37:0;162111:28;;;-1:-1:-1;;;162111:28:0;;;;162032:37;;-1:-1:-1;162079:22:0;;-1:-1:-1;;;;;162111:26:0;;;;;:28;;;;;162032:37;;162111:28;;;;;;;:26;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;162111:28:0;162181:32;;;-1:-1:-1;;;162181:32:0;;-1:-1:-1;;;;;162181:32:0;;;;;;;;;162111:28;;-1:-1:-1;162149:29:0;;162181:16;;;;;;:32;;;;;162111:28;;162181:32;;;;;;;;:16;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;162181:32:0;162255:41;;;-1:-1:-1;;;162255:41:0;;-1:-1:-1;;;;;162255:41:0;;;;;;;;;162181:32;;-1:-1:-1;162223:28:0;;162255:25;;;;;;:41;;;;;162181:32;;162255:41;;;;;;;;:25;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;162255:41:0;;-1:-1:-1;162422:103:0;148512:8;162422:94;162465:50;162471:21;162255:41;162465:5;:50::i;:::-;162422:38;162428:15;162445:14;162422:5;:38::i;:::-;:42;:94;:42;:94;:::i;:103::-;162415:110;161564:968;-1:-1:-1;;;;;;;;;;161564:968:0:o;148474:46::-;148512:8;148474:46;:::o;168376:865::-;168557:29;168596:32;168638:34;168682:28;168720:25;168786:67;168802:7;168811:14;168827:7;-1:-1:-1;;;;;168827:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;168827:25:0;168786:15;:67::i;:::-;168762:91;;168941:101;168963:12;168977:14;168993:12;169007:11;169020:21;168941;:101::i;:::-;168863:179;;-1:-1:-1;168863:179:0;-1:-1:-1;169082:72:0;169098:12;169112:14;169128:12;169142:11;169082:15;:72::i;:::-;169053:101;;169214:20;169193:17;:41;;169164:70;;168376:865;;;;;;;;;;;:::o;159983:336::-;160108:7;-1:-1:-1;;;;;160108:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;160108:18:0;-1:-1:-1;;;;;160094:32:0;:10;:32;160086:54;;;;;-1:-1:-1;;;160086:54:0;;;;;;;;;;;;-1:-1:-1;;;160086:54:0;;;;;;;;;;;;;;;160167:14;-1:-1:-1;;;;;160158:23:0;:5;-1:-1:-1;;;;;160158:23:0;;;:46;;;;-1:-1:-1;;;;;;160185:19:0;;;;160158:46;160150:74;;;;;-1:-1:-1;;;160150:74:0;;;;;;;;;;;;-1:-1:-1;;;160150:74:0;;;;;;;;;;;;;;;160273:38;;;-1:-1:-1;;;160273:38:0;;160305:4;160273:38;;;;;;160234:78;;160261:10;;-1:-1:-1;;;;;160273:23:0;;;;;:38;;;;;;;;;;;;;;:23;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;160273:38:0;-1:-1:-1;;;;;160234:26:0;;;:78;;:26;:78;:::i;156709:227::-;156856:45;156872:7;156881:14;156897:3;156856:15;:45::i;:::-;156840:12;:61;;156832:97;;;;;-1:-1:-1;;;156832:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;169558:164;169643:7;169669:46;148512:8;169669:37;:3;169677:2;:28;;;169669:37;:7;:37;:::i;:46::-;169662:53;;169558:164;;;;;:::o;166181:1146::-;166394:28;166424:21;166507:12;166529:6;166507:29;;166547:23;166573:5;-1:-1:-1;;;;;166573:16:0;;166590:14;166573:32;;;;;;;;;;;;;-1:-1:-1;;;;;166573:32:0;-1:-1:-1;;;;;166573:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166573:32:0;166641:43;;;-1:-1:-1;;;166641:43:0;;-1:-1:-1;;;;;166641:43:0;;;;;;;;;166573:32;;-1:-1:-1;166615:22:0;;166641:27;;;;;;:43;;;;;166573:32;;166641:43;;;;;;;;:27;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166641:43:0;166720:19;;;-1:-1:-1;;;166720:19:0;;;;166641:43;;-1:-1:-1;166694:18:0;;-1:-1:-1;;;;;166720:17:0;;;;;:19;;;;;166641:43;;166720:19;;;;;;;:17;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166720:19:0;166775:34;;;-1:-1:-1;;;166775:34:0;;;;166720:19;;-1:-1:-1;166749:19:0;;-1:-1:-1;;;;;166775:32:0;;;;;:34;;;;;166720:19;;166775:34;;;;;;;:32;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166775:34:0;166845:18;;;-1:-1:-1;;;166845:18:0;;;;166775:34;;-1:-1:-1;166819:15:0;;-1:-1:-1;;;;;166845:16:0;;;;;:18;;;;;166775:34;;166845:18;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166845:18:0;166990:209;;;-1:-1:-1;;;166990:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;166845:18;;-1:-1:-1;;;;;;166990:30:0;;;;;:209;;;;;166845:18;;166990:209;;;;;;;;:30;:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166990:209:0;167283:37;;;-1:-1:-1;;;167283:37:0;;-1:-1:-1;;;;;167283:37:0;;;;;;;;;166990:209;;-1:-1:-1;167283:29:0;;;;;;:37;;;;;166990:209;;167283:37;;;;;;;;:29;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;167283:37:0;166181:1146;;167283:37;;-1:-1:-1;166181:1146:0;;-1:-1:-1;;;;;;;;;;;166181:1146:0:o;163050:273::-;163211:7;163237:79;163254:6;163262:14;163285:11;-1:-1:-1;;;;;163278:29:0;;163308:6;163278:37;;;;;;;;;;;;;-1:-1:-1;;;;;163278:37:0;-1:-1:-1;;;;;163278:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;163237:79;163230:86;163050:273;-1:-1:-1;;;;;163050:273:0:o;150793:1175::-;151046:21;151097:12;-1:-1:-1;;;;;151084:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151084:36:0;151155:26;;;-1:-1:-1;;;151155:26:0;;;;151084:36;;-1:-1:-1;151131:19:0;;-1:-1:-1;;;;;151155:24:0;;;;;:26;;;;;151084:36;;151155:26;;;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151155:26:0;151224:39;;;-1:-1:-1;;;151224:39:0;;-1:-1:-1;;;;;151224:39:0;;;;;;;;;151155:26;;-1:-1:-1;151224:26:0;;;;;;:39;;;;;151155:26;;151224:39;;;;;;;;:26;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151224:39:0;151216:87;;;;;-1:-1:-1;;;151216:87:0;;;;;;;;;;;;-1:-1:-1;;;151216:87:0;;;;;;;;;;;;;;;151334:11;-1:-1:-1;;;;;151321:32:0;;151354:4;151321:38;;;;;;;;;;;;;-1:-1:-1;;;;;151321:38:0;-1:-1:-1;;;;;151321:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151321:38:0;151313:86;;;;;-1:-1:-1;;;151313:86:0;;;;;;;;;;;;-1:-1:-1;;;151313:86:0;;;;;;;;;;;;;;;151417:62;;;-1:-1:-1;;;151417:62:0;;-1:-1:-1;;;;;151417:62:0;;;;;;;;;;;;;;148564:1;151417:62;;;;;;:25;;;;;;:62;;;;;;;;;;;;;;;:25;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151417:62:0;151409:88;;;;;-1:-1:-1;;;151409:88:0;;;;;;;;;;;;-1:-1:-1;;;151409:88:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;151529:17:0;;;151508:18;151529:17;;;;;;;;;;;:28;;;;;;;;;;;;151647:24;151643:168;;151719:9;-1:-1:-1;;;;;151700:39:0;;151740:4;151700:45;;;;;;;;;;;;;-1:-1:-1;;;;;151700:45:0;-1:-1:-1;;;;;151700:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151700:45:0;-1:-1:-1;;;;;151759:17:0;;;;;;;151700:45;151759:17;;;;;;;:28;;;;;;;;;;:41;;-1:-1:-1;;;;;;151759:41:0;;;;;;;;;;151700:45;-1:-1:-1;151643:168:0;151847:65;;;-1:-1:-1;;;151847:65:0;;-1:-1:-1;;;;;151847:65:0;;;;;;;;;;;;;;;;;;;;;;:42;;;;;;:65;;;;;-1:-1:-1;;151847:65:0;;;;;;;;-1:-1:-1;151847:42:0;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;151928:33:0;;;-1:-1:-1;;;;;151928:33:0;;;;;;;;;;;;;;;;;-1:-1:-1;151928:33:0;;-1:-1:-1;151928:33:0;;;;;;;;;150793:1175;;;;;;;;;:::o;26456:134::-;26514:7;26540:43;26544:1;26547;26540:43;;;;;;;;;;;;;;;;;:3;:43::i;26009:176::-;26067:7;26098:5;;;26121:6;;;;26113:46;;;;;-1:-1:-1;;;26113:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27315:459;27373:7;27614:6;27610:45;;-1:-1:-1;27643:1:0;27636:8;;27610:45;27677:5;;;27681:1;27677;:5;:1;27700:5;;;;;:10;27692:56;;;;-1:-1:-1;;;27692:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28236:130;28294:7;28320:39;28324:1;28327;28320:39;;;;;;;;;;;;;;;;;:3;:39::i;164028:1154::-;164169:7;164237:12;164270:6;164237:40;;164287:23;164313:5;-1:-1:-1;;;;;164313:16:0;;164330:14;164313:32;;;;;;;;;;;;;-1:-1:-1;;;;;164313:32:0;-1:-1:-1;;;;;164313:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164313:32:0;164381:43;;;-1:-1:-1;;;164381:43:0;;-1:-1:-1;;;;;164381:43:0;;;;;;;;;164313:32;;-1:-1:-1;164355:22:0;;164381:27;;;;;;:43;;;;;164313:32;;164381:43;;;;;;;;:27;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164381:43:0;164460:19;;;-1:-1:-1;;;164460:19:0;;;;164381:43;;-1:-1:-1;164434:18:0;;-1:-1:-1;;;;;164460:17:0;;;;;:19;;;;;164381:43;;164460:19;;;;;;;:17;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164460:19:0;164515:34;;;-1:-1:-1;;;164515:34:0;;;;164460:19;;-1:-1:-1;164489:19:0;;-1:-1:-1;;;;;164515:32:0;;;;;:34;;;;;164460:19;;164515:34;;;;;;;:32;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164515:34:0;164585:18;;;-1:-1:-1;;;164585:18:0;;;;164515:34;;-1:-1:-1;164559:15:0;;-1:-1:-1;;;;;164585:16:0;;;;;:18;;;;;164515:34;;164585:18;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164585:18:0;164726:193;;;-1:-1:-1;;;164726:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;164585:18;;-1:-1:-1;164701:22:0;;-1:-1:-1;;;;;164726:30:0;;;;;:193;;;;;164585:18;;164726:193;;;;;;;:30;:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164726:193:0;165068:21;;;-1:-1:-1;;;165068:21:0;;;;164726:193;;-1:-1:-1;165027:18:0;;165048:51;;148512:8;;165048:42;;-1:-1:-1;;;;;165068:19:0;;;;;:21;;;;;164726:193;;165068:21;;;;;;;;:19;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;165068:21:0;165048:15;;:42;:19;:42;:::i;:51::-;165027:72;;165135:10;165117:14;:28;;:58;;165165:10;165117:58;;;165148:14;165117:58;165110:65;164028:1154;-1:-1:-1;;;;;;;;;;;;164028:1154:0:o;160532:344::-;160592:7;160619:6;160611:29;;;;;-1:-1:-1;;;160611:29:0;;;;;;;;;;;;-1:-1:-1;;;160611:29:0;;;;;;;;;;;;;;;148512:8;160663:7;;160688:6;;;:23;;;148512:8;160703:1;160698:2;:6;;;;;;:13;160688:23;160680:50;;;;;-1:-1:-1;;;160680:50:0;;;;;;;;;;;;-1:-1:-1;;;160680:50:0;;;;;;;;;;;;;;;160781:1;160777:5;;160771:12;;160801:8;;;;160793:35;;;;;-1:-1:-1;;;160793:35:0;;;;;;;;;;;;-1:-1:-1;;;160793:35:0;;;;;;;;;;;;;;;160868:1;160863:2;:6;;;;;;;160532:344;-1:-1:-1;;;;;160532:344:0:o;170155:475::-;170269:7;170295:283;170539:7;-1:-1:-1;;;;;170539:22:0;;170562:14;170539:38;;;;;;;;;;;;;-1:-1:-1;;;;;170539:38:0;-1:-1:-1;;;;;170539:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;170539:38:0;170438:40;;;-1:-1:-1;;;170438:40:0;;;;170295:184;;-1:-1:-1;;;;;170438:38:0;;;;;:40;;;;;170539:38;;170438:40;;;;;;;;:38;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;170438:40:0;170432:2;:46;170295:35;:9;170322:7;170295:35;:26;:35;:::i;144174:175::-;144283:58;;;-1:-1:-1;;;;;144283:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;144283:58:0;-1:-1:-1;;;144283:58:0;;;144256:86;;144276:5;;144256:19;:86::i;26881:187::-;26967:7;27002:12;26994:6;;;;26986:29;;;;-1:-1:-1;;;26986:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27037:5:0;;;26881:187::o;28848:272::-;28934:7;28968:12;28961:5;28953:28;;;;-1:-1:-1;;;28953:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28991:9;29007:1;29003;:5;;;;146437:751;146856:23;146882:69;146910:4;146882:69;;;;;;;;;;;;;;;;;146890:5;-1:-1:-1;;;;;146882:27:0;;;:69;;;;;:::i;:::-;146965:17;;146856:95;;-1:-1:-1;146965:21:0;146961:221;;147105:10;147094:30;;;;;;;;;;;;;;;-1:-1:-1;147094:30:0;147086:85;;;;-1:-1:-1;;;147086:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;140150:193;140253:12;140284:52;140306:6;140314:4;140320:1;140323:12;140253;141427:18;141438:6;141427:10;:18::i;:::-;141419:60;;;;;-1:-1:-1;;;141419:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;141550:12;141564:23;141591:6;-1:-1:-1;;;;;141591:11:0;141611:5;141619:4;141591:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;141591:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;141549:75;;;;141641:52;141659:7;141668:10;141680:12;141641:17;:52::i;:::-;141634:59;141177:523;-1:-1:-1;;;;;;;141177:523:0:o;137295:413::-;137655:20;137693:8;;;137295:413::o;142680:725::-;142795:12;142823:7;142819:580;;;-1:-1:-1;142853:10:0;142846:17;;142819:580;142964:17;;:21;142960:429;;143222:10;143216:17;143282:15;143269:10;143265:2;143261:19;143254:44;143171:145;143354:20;;-1:-1:-1;;;143354:20:0;;;;;;;;;;;;;;;;;143361:12;;143354:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "methodIdentifiers": {
              "BPTVal(address,address,address,address)": "681cb10a",
              "DL_FACTORY()": "174a5be4",
              "MAX_UINT256()": "33a581d2",
              "WAD()": "6a146024",
              "calculateClaimAndPortions(uint256[7],uint256,uint256)": "3faa6c5d",
              "fromWad(uint256,uint256)": "bf36f0e9",
              "fundLoan(mapping(address => mapping(address => address)) storage,address,address,address,address,uint256)": "fbecb171",
              "getInitialStakeRequirements(IMapleGlobals,address,address,address,address)": "767f5038",
              "getPoolSharesRequired(address,address,address,address,uint256)": "c3746825",
              "getSwapOutValue(address,address,address,address)": "ee7375be",
              "getSwapOutValueLocker(address,address,address)": "4119bdfa",
              "handleDefault(IERC20,address,address,uint256)": "0715b090",
              "increaseCustodyAllowanceChecks(address,uint256,uint256,uint256)": "297e7bf7",
              "poolSanityChecks(IMapleGlobals,address,address,uint256,uint256)": "14985168",
              "reclaimERC20(address,address,IMapleGlobals)": "a89d5ddb",
              "transferByCustodianChecks(address,address,uint256)": "1b4c9031",
              "validateDeactivation(IMapleGlobals,uint256,address)": "abbedb40"
            }
          }
        },
        "SafeERC20": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209dc2e6af5b545f75694d3d223f5284bfb7e4c0c33bc9020177f8ab9d6264be6564736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 0xC2 0xE6 0xAF JUMPDEST SLOAD 0x5F PUSH22 0x694D3D223F5284BFB7E4C0C33BC9020177F8AB9D6264 0xBE PUSH6 0x64736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "144086:3104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209dc2e6af5b545f75694d3d223f5284bfb7e4c0c33bc9020177f8ab9d6264be6564736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 0xC2 0xE6 0xAF JUMPDEST SLOAD 0x5F PUSH22 0x694D3D223F5284BFB7E4C0C33BC9020177F8AB9D6264 0xBE PUSH6 0x64736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "144086:3104:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SafeMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203306f0fcc069de6c04980fd103a393dbc3ac756940ca91ecf9558f7b911a360c64736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLER MOD CREATE 0xFC 0xC0 PUSH10 0xDE6C04980FD103A393DB 0xC3 0xAC PUSH22 0x6940CA91ECF9558F7B911A360C64736F6C634300060B STOP CALLER ",
              "sourceMap": "25757:4578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203306f0fcc069de6c04980fd103a393dbc3ac756940ca91ecf9558f7b911a360c64736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLER MOD CREATE 0xFC 0xC0 PUSH10 0xDE6C04980FD103A393DB 0xC3 0xAC PUSH22 0x6940CA91ECF9558F7B911A360C64736F6C634300060B STOP CALLER ",
              "sourceMap": "25757:4578:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SafeMathInt": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203bf3da507b90cf7cd58885d1f58efaadd3f0a23f8cf6a04c309f5b9af17388bf64736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODESIZE RETURN 0xDA POP PUSH28 0x90CF7CD58885D1F58EFAADD3F0A23F8CF6A04C309F5B9AF17388BF64 PUSH20 0x6F6C634300060B00330000000000000000000000 ",
              "sourceMap": "24677:165:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203bf3da507b90cf7cd58885d1f58efaadd3f0a23f8cf6a04c309f5b9af17388bf64736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODESIZE RETURN 0xDA POP PUSH28 0x90CF7CD58885D1F58EFAADD3F0A23F8CF6A04C309F5B9AF17388BF64 PUSH20 0x6F6C634300060B00330000000000000000000000 ",
              "sourceMap": "24677:165:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SafeMathUint": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207c9ceeb8d953af7f78ab3c7aff4b253a641f3af639b48bb6db0dfbb659472f6e64736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH29 0x9CEEB8D953AF7F78AB3C7AFF4B253A641F3AF639B48BB6DB0DFBB65947 0x2F PUSH15 0x64736F6C634300060B003300000000 ",
              "sourceMap": "24927:163:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207c9ceeb8d953af7f78ab3c7aff4b253a641f3af639b48bb6db0dfbb659472f6e64736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH29 0x9CEEB8D953AF7F78AB3C7AFF4B253A641F3AF639B48BB6DB0DFBB65947 0x2F PUSH15 0x64736F6C634300060B003300000000 ",
              "sourceMap": "24927:163:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SignedSafeMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201afaa5e1c3279b8fe751d5a92af97e34af953d131d91460fb0721c15b572650164736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE STATICCALL 0xA5 0xE1 0xC3 0x27 SWAP12 DUP16 0xE7 MLOAD 0xD5 0xA9 0x2A 0xF9 PUSH31 0x34AF953D131D91460FB0721C15B572650164736F6C634300060B0033000000 ",
              "sourceMap": "30549:2495:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201afaa5e1c3279b8fe751d5a92af97e34af953d131d91460fb0721c15b572650164736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE STATICCALL 0xA5 0xE1 0xC3 0x27 SWAP12 DUP16 0xE7 MLOAD 0xD5 0xA9 0x2A 0xF9 PUSH31 0x34AF953D131D91460FB0721C15B572650164736F6C634300060B0033000000 ",
              "sourceMap": "30549:2495:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        }
      }
    },
    "sources": {
      "contracts/core/pool/v1/Pool.sol": {
        "ast": {
          "absolutePath": "contracts/core/pool/v1/Pool.sol",
          "exportedSymbols": {
            "Address": [
              4572
            ],
            "BasicFDT": [
              1946
            ],
            "Context": [
              1076
            ],
            "ERC20": [
              1574
            ],
            "ExtendedFDT": [
              2379
            ],
            "IBPool": [
              4312
            ],
            "IBasicFDT": [
              141
            ],
            "IDebtLocker": [
              588
            ],
            "IDebtLockerFactory": [
              640
            ],
            "IERC20": [
              77
            ],
            "IERC20Details": [
              4330
            ],
            "IExtendedFDT": [
              2006
            ],
            "ILiquidityLocker": [
              2902
            ],
            "ILiquidityLockerFactory": [
              2946
            ],
            "ILoan": [
              520
            ],
            "ILoanFDT": [
              161
            ],
            "ILoanFactory": [
              3092
            ],
            "IMapleGlobals": [
              2870
            ],
            "IPool": [
              3697
            ],
            "IPoolFDT": [
              3120
            ],
            "IPoolFactory": [
              3821
            ],
            "IStakeLocker": [
              4104
            ],
            "IStakeLockerFDT": [
              3849
            ],
            "IStakeLockerFactory": [
              4156
            ],
            "ISubFactory": [
              596
            ],
            "Pool": [
              7392
            ],
            "PoolFDT": [
              3230
            ],
            "PoolLib": [
              5865
            ],
            "SafeERC20": [
              4780
            ],
            "SafeMath": [
              878
            ],
            "SafeMathInt": [
              661
            ],
            "SafeMathUint": [
              684
            ],
            "SignedSafeMath": [
              1055
            ]
          },
          "id": 7393,
          "license": "AGPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "=",
                "0.6",
                ".11",
                ">=",
                "0.6",
                ".0",
                "<",
                "0.8",
                ".0",
                ">=",
                "0.6",
                ".2",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "108:54:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "270: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": "364: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": "455:2:0"
                  },
                  "returnParameters": {
                    "id": 7,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8,
                        "src": "481:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "481:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "480:9:0"
                  },
                  "scope": 77,
                  "src": "435:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 9,
                    "nodeType": "StructuredDocumentation",
                    "src": "496: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": "592:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "592:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "591:17:0"
                  },
                  "returnParameters": {
                    "id": 15,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 14,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 16,
                        "src": "632:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "632:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "631:9:0"
                  },
                  "scope": 77,
                  "src": "573:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 17,
                    "nodeType": "StructuredDocumentation",
                    "src": "647: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": "879:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 18,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "879: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": "898:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 20,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "898:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "878:35:0"
                  },
                  "returnParameters": {
                    "id": 25,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 24,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 26,
                        "src": "932:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 23,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "932:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "931:6:0"
                  },
                  "scope": 77,
                  "src": "861:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 27,
                    "nodeType": "StructuredDocumentation",
                    "src": "944: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": "1232:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 28,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1232: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": "1247:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 30,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1247:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1231:32:0"
                  },
                  "returnParameters": {
                    "id": 35,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 34,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1287:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1287:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1286:9:0"
                  },
                  "scope": 77,
                  "src": "1213:83:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 37,
                    "nodeType": "StructuredDocumentation",
                    "src": "1302: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": "1966:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 38,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1966: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": "1983:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 40,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1983:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1965:33:0"
                  },
                  "returnParameters": {
                    "id": 45,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 44,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "2017:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 43,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2017:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2016:6:0"
                  },
                  "scope": 77,
                  "src": "1949:74:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 47,
                    "nodeType": "StructuredDocumentation",
                    "src": "2029: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": "2352:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 48,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2352: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": "2368:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 50,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2368: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": "2387:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 52,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2387:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2351:51:0"
                  },
                  "returnParameters": {
                    "id": 57,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 56,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2421:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 55,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2421:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2420:6:0"
                  },
                  "scope": 77,
                  "src": "2330:97:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 59,
                    "nodeType": "StructuredDocumentation",
                    "src": "2433: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": "2611:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 60,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2611: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": "2633:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 62,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2633: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": "2653:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 64,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2653:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2610:57:0"
                  },
                  "src": "2596:72:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 68,
                    "nodeType": "StructuredDocumentation",
                    "src": "2674: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": "2842:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 69,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2842: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": "2865:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 71,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2865: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": "2890:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 73,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2890:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2841:63:0"
                  },
                  "src": "2827:78:0"
                }
              ],
              "scope": 7393,
              "src": "341:2566:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 79,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "3240:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 80,
                  "nodeType": "InheritanceSpecifier",
                  "src": "3240:6:0"
                }
              ],
              "contractDependencies": [
                77
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 78,
                "nodeType": "StructuredDocumentation",
                "src": "3123: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": "3254: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": "3518:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 82,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3518: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": "3538:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 84,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3538:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3517:46:0"
                  },
                  "src": "3495:69:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 88,
                    "nodeType": "StructuredDocumentation",
                    "src": "3570: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": "3911:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 89,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3911: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": "3931:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 91,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3931: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": "3955:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 93,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3955:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3910:68:0"
                  },
                  "src": "3890:89:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 97,
                    "nodeType": "StructuredDocumentation",
                    "src": "3985: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": "4197:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 98,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4197:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4196:9:0"
                  },
                  "src": "4169:37:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 102,
                    "nodeType": "StructuredDocumentation",
                    "src": "4212: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": "4482:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 103,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4482: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": "4499:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 105,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4499:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4481:25:0"
                  },
                  "src": "4452:55:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 109,
                    "nodeType": "StructuredDocumentation",
                    "src": "4513: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": "4748:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4748:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4747:16:0"
                  },
                  "returnParameters": {
                    "id": 115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 114,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 116,
                        "src": "4787:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 113,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4787:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4786:9:0"
                  },
                  "scope": 141,
                  "src": "4719:77:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 117,
                    "nodeType": "StructuredDocumentation",
                    "src": "4802: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": "4911:2:0"
                  },
                  "returnParameters": {
                    "id": 119,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4922:0:0"
                  },
                  "scope": 141,
                  "src": "4889:34:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 121,
                    "nodeType": "StructuredDocumentation",
                    "src": "4929: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": "5165:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 122,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5165:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5164:16:0"
                  },
                  "returnParameters": {
                    "id": 127,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 126,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 128,
                        "src": "5204:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 125,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5204:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5203:9:0"
                  },
                  "scope": 141,
                  "src": "5139:74:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 129,
                    "nodeType": "StructuredDocumentation",
                    "src": "5219: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": "5675:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 130,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5675:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5674:16:0"
                  },
                  "returnParameters": {
                    "id": 135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 134,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 136,
                        "src": "5714:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5714:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5713:9:0"
                  },
                  "scope": 141,
                  "src": "5646:77:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 137,
                    "nodeType": "StructuredDocumentation",
                    "src": "5729: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": "6130:2:0"
                  },
                  "returnParameters": {
                    "id": 139,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6141:0:0"
                  },
                  "scope": 141,
                  "src": "6102:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "3217:2928:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 142,
                    "name": "IBasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 141,
                    "src": "6461:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBasicFDT_$141",
                      "typeString": "contract IBasicFDT"
                    }
                  },
                  "id": 143,
                  "nodeType": "InheritanceSpecifier",
                  "src": "6461:9:0"
                }
              ],
              "contractDependencies": [
                77,
                141
              ],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 161,
              "linearizedBaseContracts": [
                161,
                141,
                77
              ],
              "name": "ILoanFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 144,
                    "nodeType": "StructuredDocumentation",
                    "src": "6478:54:0",
                    "text": "@dev The `fundsToken` (dividends)."
                  },
                  "functionSelector": "63f04b15",
                  "id": 149,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 145,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6556:2:0"
                  },
                  "returnParameters": {
                    "id": 148,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 147,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 149,
                        "src": "6582:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 146,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "6582:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6581:8:0"
                  },
                  "scope": 161,
                  "src": "6537:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 150,
                    "nodeType": "StructuredDocumentation",
                    "src": "6596:123:0",
                    "text": "@dev The amount of `fundsToken` (Liquidity Asset) currently present and accounted for in this contract."
                  },
                  "functionSelector": "a9691f3f",
                  "id": 155,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 151,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6750:2:0"
                  },
                  "returnParameters": {
                    "id": 154,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 153,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 155,
                        "src": "6776:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 152,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6776:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6775:9:0"
                  },
                  "scope": 161,
                  "src": "6724:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": null,
                  "documentation": {
                    "id": 156,
                    "nodeType": "StructuredDocumentation",
                    "src": "6791:73:0",
                    "text": "@dev Withdraws all available funds for a token holder."
                  },
                  "functionSelector": "24600fc3",
                  "id": 160,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 158,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "6903:8:0"
                  },
                  "parameters": {
                    "id": 157,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6891:2:0"
                  },
                  "returnParameters": {
                    "id": 159,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6911:0:0"
                  },
                  "scope": 161,
                  "src": "6869:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "6439:476:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 162,
                    "name": "ILoanFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 161,
                    "src": "7176:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILoanFDT_$161",
                      "typeString": "contract ILoanFDT"
                    }
                  },
                  "id": 163,
                  "nodeType": "InheritanceSpecifier",
                  "src": "7176:8:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                161
              ],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 520,
              "linearizedBaseContracts": [
                520,
                161,
                141,
                77
              ],
              "name": "ILoan",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "ILoan.State",
                  "id": 169,
                  "members": [
                    {
                      "id": 164,
                      "name": "Ready",
                      "nodeType": "EnumValue",
                      "src": "7629:5:0"
                    },
                    {
                      "id": 165,
                      "name": "Active",
                      "nodeType": "EnumValue",
                      "src": "7636:6:0"
                    },
                    {
                      "id": 166,
                      "name": "Matured",
                      "nodeType": "EnumValue",
                      "src": "7644:7:0"
                    },
                    {
                      "id": 167,
                      "name": "Expired",
                      "nodeType": "EnumValue",
                      "src": "7653:7:0"
                    },
                    {
                      "id": 168,
                      "name": "Liquidated",
                      "nodeType": "EnumValue",
                      "src": "7662:10:0"
                    }
                  ],
                  "name": "State",
                  "nodeType": "EnumDefinition",
                  "src": "7616:58:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 170,
                    "nodeType": "StructuredDocumentation",
                    "src": "7680:196:0",
                    "text": "@dev   Emits an event indicating the Loan was funded.\n@param fundedBy     The Pool that funded the Loan.\n@param amountFunded The amount the Loan was funded for."
                  },
                  "id": 176,
                  "name": "LoanFunded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 175,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 172,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "fundedBy",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 176,
                        "src": "7898:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 171,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7898:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 174,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amountFunded",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 176,
                        "src": "7924:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 173,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7924:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7897:48:0"
                  },
                  "src": "7881:65:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 177,
                    "nodeType": "StructuredDocumentation",
                    "src": "7952:262:0",
                    "text": "@dev   Emits an event indicating the balance for an account was updated.\n@param account The address of an account.\n@param token   The token address of the asset.\n@param balance The new balance of `token` for `account`."
                  },
                  "id": 185,
                  "name": "BalanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 184,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 179,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 185,
                        "src": "8240:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 178,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8240:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 181,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 185,
                        "src": "8265:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 180,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8265:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 183,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 185,
                        "src": "8288:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 182,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8288:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8239:65:0"
                  },
                  "src": "8219:86:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 186,
                    "nodeType": "StructuredDocumentation",
                    "src": "8311:153:0",
                    "text": "@dev   Emits an event indicating the some loaned amount was drawn down.\n@param drawdownAmount The amount that was drawn down."
                  },
                  "id": 190,
                  "name": "Drawdown",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 189,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 188,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "drawdownAmount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 190,
                        "src": "8484:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 187,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8484:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8483:24:0"
                  },
                  "src": "8469:39:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 191,
                    "nodeType": "StructuredDocumentation",
                    "src": "8514:127:0",
                    "text": "@dev   Emits an event indicating the state of the Loan changed.\n@param state The state of the Loan."
                  },
                  "id": 195,
                  "name": "LoanStateChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 194,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 193,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "state",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 195,
                        "src": "8669:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$169",
                          "typeString": "enum ILoan.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 192,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 169,
                          "src": "8669:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$169",
                            "typeString": "enum ILoan.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8668:13:0"
                  },
                  "src": "8646:36:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 196,
                    "nodeType": "StructuredDocumentation",
                    "src": "8688:220:0",
                    "text": "@dev   Emits an event indicating the an Admin for the Loan was set.\n@param loanAdmin The address of some Loan Admin.\n@param allowed   Whether `loanAdmin` is a Loan Admin for this Loan."
                  },
                  "id": 202,
                  "name": "LoanAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 201,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 198,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loanAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 202,
                        "src": "8932:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 197,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8932:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 200,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 202,
                        "src": "8959:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 199,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8959:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8931:41:0"
                  },
                  "src": "8913:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 203,
                    "nodeType": "StructuredDocumentation",
                    "src": "8979:580:0",
                    "text": "@dev   Emits an event indicating the a payment was made for the Loan.\n@param totalPaid         The total amount paid.\n@param principalPaid     The principal portion of the amount paid.\n@param interestPaid      The interest portion of the amount paid.\n@param paymentsRemaining The amount of payment remaining.\n@param principalOwed     The outstanding principal of the Loan.\n@param nextPaymentDue    The timestamp of the due date of the next payment.\n@param latePayment       Whether this payment was late."
                  },
                  "id": 219,
                  "name": "PaymentMade",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 205,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "totalPaid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9591:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 204,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9591:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 207,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "principalPaid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9618:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 206,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9618:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 209,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "interestPaid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9649:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 208,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9649:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 211,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "paymentsRemaining",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9679:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 210,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9679:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 213,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "principalOwed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9714:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 212,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9714:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 215,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "nextPaymentDue",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9745:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 214,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9745:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 217,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "latePayment",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9777:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 216,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "9777:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9581:218:0"
                  },
                  "src": "9564:236:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 220,
                    "nodeType": "StructuredDocumentation",
                    "src": "9806:420:0",
                    "text": "@dev   Emits an event indicating the the Loan was liquidated.\n@param collateralSwapped      The amount of Collateral Asset swapped.\n@param liquidityAssetReturned The amount of Liquidity Asset recovered from swap.\n@param liquidationExcess      The amount of Liquidity Asset returned to borrower.\n@param defaultSuffered        The remaining losses after the liquidation."
                  },
                  "id": 230,
                  "name": "Liquidation",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 229,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 222,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "collateralSwapped",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 230,
                        "src": "10258:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 221,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10258:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 224,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAssetReturned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 230,
                        "src": "10293:30:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 223,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10293:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 226,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidationExcess",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 230,
                        "src": "10333:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 225,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10333:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 228,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "defaultSuffered",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 230,
                        "src": "10368:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 227,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10368:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10248:149:0"
                  },
                  "src": "10231:167:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 231,
                    "nodeType": "StructuredDocumentation",
                    "src": "10404:92:0",
                    "text": "@dev The current state of this Loan, as defined in the State enum below."
                  },
                  "functionSelector": "25af34cd",
                  "id": 236,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loanState",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 232,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10519:2:0"
                  },
                  "returnParameters": {
                    "id": 235,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 234,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 236,
                        "src": "10545:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$169",
                          "typeString": "enum ILoan.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 233,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 169,
                          "src": "10545:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$169",
                            "typeString": "enum ILoan.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10544:7:0"
                  },
                  "scope": 520,
                  "src": "10501:51:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 237,
                    "nodeType": "StructuredDocumentation",
                    "src": "10558:103:0",
                    "text": "@dev The asset deposited by Lenders into the FundingLocker, when funding this Loan."
                  },
                  "functionSelector": "209b2bca",
                  "id": 242,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 238,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10689:2:0"
                  },
                  "returnParameters": {
                    "id": 241,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 240,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 242,
                        "src": "10715:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 239,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "10715:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10714:8:0"
                  },
                  "scope": 520,
                  "src": "10666:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 243,
                    "nodeType": "StructuredDocumentation",
                    "src": "10729:114:0",
                    "text": "@dev The asset deposited by Borrower into the CollateralLocker, for collateralizing this Loan."
                  },
                  "functionSelector": "aabaecd6",
                  "id": 248,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collateralAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 244,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10872:2:0"
                  },
                  "returnParameters": {
                    "id": 247,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 246,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 248,
                        "src": "10898:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 245,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "10898:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10897:8:0"
                  },
                  "scope": 520,
                  "src": "10848:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 249,
                    "nodeType": "StructuredDocumentation",
                    "src": "10912:92:0",
                    "text": "@dev The FundingLocker that holds custody of Loan funds before drawdown."
                  },
                  "functionSelector": "743e5d1d",
                  "id": 254,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundingLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 250,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11031:2:0"
                  },
                  "returnParameters": {
                    "id": 253,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 252,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 254,
                        "src": "11057:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 251,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11057:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11056:9:0"
                  },
                  "scope": 520,
                  "src": "11009:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 255,
                    "nodeType": "StructuredDocumentation",
                    "src": "11072:50:0",
                    "text": "@dev The FundingLockerFactory."
                  },
                  "functionSelector": "2c3c1216",
                  "id": 260,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "flFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 256,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11145:2:0"
                  },
                  "returnParameters": {
                    "id": 259,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 258,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 260,
                        "src": "11171:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 257,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11171:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11170:9:0"
                  },
                  "scope": 520,
                  "src": "11127:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 261,
                    "nodeType": "StructuredDocumentation",
                    "src": "11186:84:0",
                    "text": "@dev The CollateralLocker that holds custody of Loan collateral."
                  },
                  "functionSelector": "09f64d08",
                  "id": 266,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collateralLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 262,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11300:2:0"
                  },
                  "returnParameters": {
                    "id": 265,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 264,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 266,
                        "src": "11326:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 263,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11326:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11325:9:0"
                  },
                  "scope": 520,
                  "src": "11275:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 267,
                    "nodeType": "StructuredDocumentation",
                    "src": "11341:53:0",
                    "text": "@dev The CollateralLockerFactory."
                  },
                  "functionSelector": "e74f6166",
                  "id": 272,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "clFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 268,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11417:2:0"
                  },
                  "returnParameters": {
                    "id": 271,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 270,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 272,
                        "src": "11443:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 269,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11443:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11442:9:0"
                  },
                  "scope": 520,
                  "src": "11399:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 273,
                    "nodeType": "StructuredDocumentation",
                    "src": "11458:79:0",
                    "text": "@dev The Borrower of this Loan, responsible for repayments."
                  },
                  "functionSelector": "7df1f1b9",
                  "id": 278,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "borrower",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 274,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11559:2:0"
                  },
                  "returnParameters": {
                    "id": 277,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 276,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 278,
                        "src": "11585:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 275,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11585:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11584:9:0"
                  },
                  "scope": 520,
                  "src": "11542:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 279,
                    "nodeType": "StructuredDocumentation",
                    "src": "11600:57:0",
                    "text": "@dev The RepaymentCalc for this Loan."
                  },
                  "functionSelector": "06775458",
                  "id": 284,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "repaymentCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 280,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11684:2:0"
                  },
                  "returnParameters": {
                    "id": 283,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 282,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 284,
                        "src": "11710:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 281,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11710:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11709:9:0"
                  },
                  "scope": 520,
                  "src": "11662:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 285,
                    "nodeType": "StructuredDocumentation",
                    "src": "11725:55:0",
                    "text": "@dev The LateFeeCalc for this Loan."
                  },
                  "functionSelector": "5e8bdbeb",
                  "id": 290,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lateFeeCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 286,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11805:2:0"
                  },
                  "returnParameters": {
                    "id": 289,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 288,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 290,
                        "src": "11831:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 287,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11831:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11830:9:0"
                  },
                  "scope": 520,
                  "src": "11785:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 291,
                    "nodeType": "StructuredDocumentation",
                    "src": "11846:55:0",
                    "text": "@dev The PremiumCalc for this Loan."
                  },
                  "functionSelector": "757116a0",
                  "id": 296,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "premiumCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 292,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11926:2:0"
                  },
                  "returnParameters": {
                    "id": 295,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 294,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 296,
                        "src": "11952:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 293,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11952:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11951:9:0"
                  },
                  "scope": 520,
                  "src": "11906:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 297,
                    "nodeType": "StructuredDocumentation",
                    "src": "11967:65:0",
                    "text": "@dev The LoanFactory that deployed this Loan."
                  },
                  "functionSelector": "0d49b38c",
                  "id": 302,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "superFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 298,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12058:2:0"
                  },
                  "returnParameters": {
                    "id": 301,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 300,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 302,
                        "src": "12084:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 299,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12084:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12083:9:0"
                  },
                  "scope": 520,
                  "src": "12037:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 303,
                    "nodeType": "StructuredDocumentation",
                    "src": "12099:176:0",
                    "text": "@param  loanAdmin The address of some admin.\n@return Whether the `loanAdmin` has permission to do certain operations in case of disaster management."
                  },
                  "functionSelector": "4be7cb14",
                  "id": 310,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loanAdmins",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 306,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 305,
                        "mutability": "mutable",
                        "name": "loanAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 310,
                        "src": "12300:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 304,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12300:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12299:19:0"
                  },
                  "returnParameters": {
                    "id": 309,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 308,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 310,
                        "src": "12342:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 307,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "12342:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12341:6:0"
                  },
                  "scope": 520,
                  "src": "12280:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 311,
                    "nodeType": "StructuredDocumentation",
                    "src": "12354:73:0",
                    "text": "@dev The unix timestamp due date of the next payment."
                  },
                  "functionSelector": "b4198570",
                  "id": 316,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "nextPaymentDue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 312,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12455:2:0"
                  },
                  "returnParameters": {
                    "id": 315,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 314,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 316,
                        "src": "12481:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 313,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12481:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12480:9:0"
                  },
                  "scope": 520,
                  "src": "12432:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 317,
                    "nodeType": "StructuredDocumentation",
                    "src": "12496:49:0",
                    "text": "@dev The APR in basis points."
                  },
                  "functionSelector": "57ded9c9",
                  "id": 322,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "apr",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 318,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12562:2:0"
                  },
                  "returnParameters": {
                    "id": 321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 320,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 322,
                        "src": "12588:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 319,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12588:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12587:9:0"
                  },
                  "scope": 520,
                  "src": "12550:47:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 323,
                    "nodeType": "StructuredDocumentation",
                    "src": "12603:70:0",
                    "text": "@dev The number of payments remaining on the Loan."
                  },
                  "functionSelector": "0895326f",
                  "id": 328,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "paymentsRemaining",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 324,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12704:2:0"
                  },
                  "returnParameters": {
                    "id": 327,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 326,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 328,
                        "src": "12730:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 325,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12730:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12729:9:0"
                  },
                  "scope": 520,
                  "src": "12678:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 329,
                    "nodeType": "StructuredDocumentation",
                    "src": "12745:67:0",
                    "text": "@dev The total length of the Loan term in days."
                  },
                  "functionSelector": "469cbfdb",
                  "id": 334,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "termDays",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 330,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12834:2:0"
                  },
                  "returnParameters": {
                    "id": 333,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 332,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 334,
                        "src": "12860:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 331,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12860:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12859:9:0"
                  },
                  "scope": 520,
                  "src": "12817:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 335,
                    "nodeType": "StructuredDocumentation",
                    "src": "12875:67:0",
                    "text": "@dev The time between Loan payments in seconds."
                  },
                  "functionSelector": "f5552788",
                  "id": 340,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "paymentIntervalSeconds",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 336,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12978:2:0"
                  },
                  "returnParameters": {
                    "id": 339,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 338,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 340,
                        "src": "13004:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 337,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13004:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13003:9:0"
                  },
                  "scope": 520,
                  "src": "12947:66:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 341,
                    "nodeType": "StructuredDocumentation",
                    "src": "13019:61:0",
                    "text": "@dev The total requested amount for Loan."
                  },
                  "functionSelector": "f52ec46c",
                  "id": 346,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "requestAmount",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 342,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13107:2:0"
                  },
                  "returnParameters": {
                    "id": 345,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 344,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 346,
                        "src": "13133:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 343,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13133:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13132:9:0"
                  },
                  "scope": 520,
                  "src": "13085:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 347,
                    "nodeType": "StructuredDocumentation",
                    "src": "13148:110:0",
                    "text": "@dev The percentage of value of the drawdown amount to post as collateral in basis points."
                  },
                  "functionSelector": "b4eae1cb",
                  "id": 352,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collateralRatio",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 348,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13287:2:0"
                  },
                  "returnParameters": {
                    "id": 351,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 350,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 352,
                        "src": "13313:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 349,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13313:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13312:9:0"
                  },
                  "scope": 520,
                  "src": "13263:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 353,
                    "nodeType": "StructuredDocumentation",
                    "src": "13328:69:0",
                    "text": "@dev The timestamp of when Loan was instantiated."
                  },
                  "functionSelector": "cf09e0d0",
                  "id": 358,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createdAt",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 354,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13420:2:0"
                  },
                  "returnParameters": {
                    "id": 357,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 356,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 358,
                        "src": "13446:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 355,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13446:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13445:9:0"
                  },
                  "scope": 520,
                  "src": "13402:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 359,
                    "nodeType": "StructuredDocumentation",
                    "src": "13461:69:0",
                    "text": "@dev The time for a Loan to be funded in seconds."
                  },
                  "functionSelector": "74d7c62b",
                  "id": 364,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundingPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 360,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13557:2:0"
                  },
                  "returnParameters": {
                    "id": 363,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 362,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 364,
                        "src": "13583:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 361,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13583:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13582:9:0"
                  },
                  "scope": 520,
                  "src": "13535:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 365,
                    "nodeType": "StructuredDocumentation",
                    "src": "13598:123:0",
                    "text": "@dev The time a Borrower has, after a payment is due, to make a payment before a liquidation can occur."
                  },
                  "functionSelector": "705d5f24",
                  "id": 370,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defaultGracePeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 366,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13753:2:0"
                  },
                  "returnParameters": {
                    "id": 369,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 368,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 370,
                        "src": "13779:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13779:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13778:9:0"
                  },
                  "scope": 520,
                  "src": "13726:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 371,
                    "nodeType": "StructuredDocumentation",
                    "src": "13794:86:0",
                    "text": "@dev The amount of principal owed (initially the drawdown amount)."
                  },
                  "functionSelector": "19350114",
                  "id": 376,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "principalOwed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 372,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13907:2:0"
                  },
                  "returnParameters": {
                    "id": 375,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 374,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 376,
                        "src": "13933:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 373,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13933:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13932:9:0"
                  },
                  "scope": 520,
                  "src": "13885:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 377,
                    "nodeType": "StructuredDocumentation",
                    "src": "13948:113:0",
                    "text": "@dev The amount of principal that has been paid by the Borrower since the Loan instantiation."
                  },
                  "functionSelector": "64195ba8",
                  "id": 382,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "principalPaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 378,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14088:2:0"
                  },
                  "returnParameters": {
                    "id": 381,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 380,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 382,
                        "src": "14114:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 379,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14114:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14113:9:0"
                  },
                  "scope": 520,
                  "src": "14066:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 383,
                    "nodeType": "StructuredDocumentation",
                    "src": "14129:112:0",
                    "text": "@dev The amount of interest that has been paid by the Borrower since the Loan instantiation."
                  },
                  "functionSelector": "e48671c4",
                  "id": 388,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "interestPaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 384,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14267:2:0"
                  },
                  "returnParameters": {
                    "id": 387,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 386,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 388,
                        "src": "14293:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 385,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14293:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14292:9:0"
                  },
                  "scope": 520,
                  "src": "14246:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 389,
                    "nodeType": "StructuredDocumentation",
                    "src": "14308:109:0",
                    "text": "@dev The amount of fees that have been paid by the Borrower since the Loan instantiation."
                  },
                  "functionSelector": "ac7c5780",
                  "id": 394,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "feePaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 390,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14438:2:0"
                  },
                  "returnParameters": {
                    "id": 393,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 392,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 394,
                        "src": "14464:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 391,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14464:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14463:9:0"
                  },
                  "scope": 520,
                  "src": "14422:51:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 395,
                    "nodeType": "StructuredDocumentation",
                    "src": "14479:108:0",
                    "text": "@dev The amount of excess that has been returned to the Lenders after the Loan drawdown."
                  },
                  "functionSelector": "31a7958f",
                  "id": 400,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "excessReturned",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 396,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14615:2:0"
                  },
                  "returnParameters": {
                    "id": 399,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 398,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 400,
                        "src": "14641:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 397,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14641:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14640:9:0"
                  },
                  "scope": 520,
                  "src": "14592:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 401,
                    "nodeType": "StructuredDocumentation",
                    "src": "14656:95:0",
                    "text": "@dev The amount of Collateral Asset that has been liquidated after default."
                  },
                  "functionSelector": "c9f4e490",
                  "id": 406,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "amountLiquidated",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 402,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14781:2:0"
                  },
                  "returnParameters": {
                    "id": 405,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 404,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 406,
                        "src": "14807:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 403,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14807:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14806:9:0"
                  },
                  "scope": 520,
                  "src": "14756:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 407,
                    "nodeType": "StructuredDocumentation",
                    "src": "14822:93:0",
                    "text": "@dev The amount of Liquidity Asset that has been recovered after default."
                  },
                  "functionSelector": "39c02899",
                  "id": 412,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "amountRecovered",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 408,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14944:2:0"
                  },
                  "returnParameters": {
                    "id": 411,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 410,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 412,
                        "src": "14970:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 409,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14970:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14969:9:0"
                  },
                  "scope": 520,
                  "src": "14920:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 413,
                    "nodeType": "StructuredDocumentation",
                    "src": "14985:104:0",
                    "text": "@dev The difference between `amountRecovered` and `principalOwed` after liquidation."
                  },
                  "functionSelector": "4b27ef6c",
                  "id": 418,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defaultSuffered",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 414,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15118:2:0"
                  },
                  "returnParameters": {
                    "id": 417,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 416,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 418,
                        "src": "15144:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 415,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15144:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15143:9:0"
                  },
                  "scope": 520,
                  "src": "15094:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 419,
                    "nodeType": "StructuredDocumentation",
                    "src": "15159:132:0",
                    "text": "@dev The amount of Liquidity Asset that is to be returned to the Borrower, if `amountRecovered > principalOwed`."
                  },
                  "functionSelector": "cee96669",
                  "id": 424,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidationExcess",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 420,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15322:2:0"
                  },
                  "returnParameters": {
                    "id": 423,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 422,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 424,
                        "src": "15348:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15348:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15347:9:0"
                  },
                  "scope": 520,
                  "src": "15296:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 425,
                    "nodeType": "StructuredDocumentation",
                    "src": "15363:509:0",
                    "text": "@dev   Draws down funding from FundingLocker, posts collateral, and transitions the Loan state from `Ready` to `Active`. \n@dev   Only the Borrower can call this function. \n@dev   It emits four `BalanceUpdated` events. \n@dev   It emits a `LoanStateChanged` event. \n@dev   It emits a `Drawdown` event. \n@param amt the amount of Liquidity Asset the Borrower draws down. Remainder is returned to the Loan where it can be claimed back by LoanFDT holders."
                  },
                  "functionSelector": "a079a4dd",
                  "id": 430,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "drawdown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 428,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 427,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 430,
                        "src": "15895:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 426,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15895:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15894:13:0"
                  },
                  "returnParameters": {
                    "id": 429,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15916:0:0"
                  },
                  "scope": 520,
                  "src": "15877:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 431,
                    "nodeType": "StructuredDocumentation",
                    "src": "15923:111:0",
                    "text": "@dev Makes a payment for this Loan. \n@dev Amounts are calculated for the Borrower. "
                  },
                  "functionSelector": "d8d79700",
                  "id": 434,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "makePayment",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 432,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16059:2:0"
                  },
                  "returnParameters": {
                    "id": 433,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16070:0:0"
                  },
                  "scope": 520,
                  "src": "16039:32:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 435,
                    "nodeType": "StructuredDocumentation",
                    "src": "16077:154:0",
                    "text": "@dev Makes the full payment for this Loan (a.k.a. \"calling\" the Loan). \n@dev This requires the Borrower to pay a premium fee. "
                  },
                  "functionSelector": "60bd1f87",
                  "id": 438,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "makeFullPayment",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 436,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16260:2:0"
                  },
                  "returnParameters": {
                    "id": 437,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16271:0:0"
                  },
                  "scope": 520,
                  "src": "16236:36:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 439,
                    "nodeType": "StructuredDocumentation",
                    "src": "16282:416:0",
                    "text": "@dev   Funds this Loan and mints LoanFDTs for `mintTo` (DebtLocker in the case of Pool funding). \n@dev   Only LiquidityLocker using valid/approved Pool can call this function. \n@dev   It emits a `LoanFunded` event. \n@dev   It emits a `BalanceUpdated` event. \n@param mintTo The address that LoanFDTs are minted to.\n@param amt    The amount to fund the Loan."
                  },
                  "functionSelector": "e920b1e1",
                  "id": 446,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 444,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 441,
                        "mutability": "mutable",
                        "name": "mintTo",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 446,
                        "src": "16721:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 440,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16721:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 443,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 446,
                        "src": "16737:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 442,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16737:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "16720:29:0"
                  },
                  "returnParameters": {
                    "id": 445,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16758:0:0"
                  },
                  "scope": 520,
                  "src": "16703:56:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 447,
                    "nodeType": "StructuredDocumentation",
                    "src": "16765:257:0",
                    "text": "@dev Handles returning capital to the Loan, where it can be claimed back by LoanFDT holders, \nif the Borrower has not drawn down on the Loan past the drawdown grace period. \n@dev It emits a `LoanStateChanged` event. "
                  },
                  "functionSelector": "807763ab",
                  "id": 450,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unwind",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 448,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17042:2:0"
                  },
                  "returnParameters": {
                    "id": 449,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17053:0:0"
                  },
                  "scope": 520,
                  "src": "17027:27:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 451,
                    "nodeType": "StructuredDocumentation",
                    "src": "17060:384:0",
                    "text": "@dev Triggers a default if the Loan meets certain default conditions, liquidating all collateral and updating accounting. \n@dev Only the an account with sufficient LoanFDTs of this Loan can call this function. \n@dev It emits a `BalanceUpdated` event. \n@dev It emits a `Liquidation` event. \n@dev It emits a `LoanStateChanged` event. "
                  },
                  "functionSelector": "175f8329",
                  "id": 454,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "triggerDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 452,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17472:2:0"
                  },
                  "returnParameters": {
                    "id": 453,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17483:0:0"
                  },
                  "scope": 520,
                  "src": "17449:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 455,
                    "nodeType": "StructuredDocumentation",
                    "src": "17490:163:0",
                    "text": "@dev Triggers paused state. \n@dev Halts functionality for certain functions. Only the Borrower or a Loan Admin can call this function. "
                  },
                  "functionSelector": "8456cb59",
                  "id": 458,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 456,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17672:2:0"
                  },
                  "returnParameters": {
                    "id": 457,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17683:0:0"
                  },
                  "scope": 520,
                  "src": "17658:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 459,
                    "nodeType": "StructuredDocumentation",
                    "src": "17690:182:0",
                    "text": "@dev Triggers unpaused state. \n@dev Restores functionality for certain functions. \n@dev Only the Borrower or a Loan Admin can call this function. "
                  },
                  "functionSelector": "3f4ba83a",
                  "id": 462,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 460,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17893:2:0"
                  },
                  "returnParameters": {
                    "id": 461,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17904:0:0"
                  },
                  "scope": 520,
                  "src": "17877:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 463,
                    "nodeType": "StructuredDocumentation",
                    "src": "17911:288:0",
                    "text": "@dev   Sets a Loan Admin. \n@dev   Only the Borrower can call this function. \n@dev   It emits a `LoanAdminSet` event. \n@param loanAdmin The address being allowed or disallowed as a Loan Admin.\n@param allowed   The atatus of a Loan Admin."
                  },
                  "functionSelector": "92769d94",
                  "id": 470,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLoanAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 468,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 465,
                        "mutability": "mutable",
                        "name": "loanAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 470,
                        "src": "18226:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 464,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18226:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 467,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 470,
                        "src": "18245:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 466,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "18245:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "18225:33:0"
                  },
                  "returnParameters": {
                    "id": 469,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18267:0:0"
                  },
                  "scope": 520,
                  "src": "18204:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 471,
                    "nodeType": "StructuredDocumentation",
                    "src": "18274:192:0",
                    "text": "@dev   Transfers any locked funds to the Governor. \n@dev   Only the Governor can call this function. \n@param token The address of the token to be reclaimed."
                  },
                  "functionSelector": "8905fd4f",
                  "id": 476,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "reclaimERC20",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 474,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 473,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 476,
                        "src": "18493:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 472,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18493:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "18492:15:0"
                  },
                  "returnParameters": {
                    "id": 475,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18516:0:0"
                  },
                  "scope": 520,
                  "src": "18471:46:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    160
                  ],
                  "body": null,
                  "documentation": {
                    "id": 477,
                    "nodeType": "StructuredDocumentation",
                    "src": "18523:147:0",
                    "text": "@dev Withdraws all available funds earned through LoanFDT for a token holder. \n@dev It emits a `BalanceUpdated` event. "
                  },
                  "functionSelector": "24600fc3",
                  "id": 481,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 479,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "18709:8:0"
                  },
                  "parameters": {
                    "id": 478,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18697:2:0"
                  },
                  "returnParameters": {
                    "id": 480,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18717:0:0"
                  },
                  "scope": 520,
                  "src": "18675:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 482,
                    "nodeType": "StructuredDocumentation",
                    "src": "18724:246:0",
                    "text": "@dev    Returns the expected amount of Liquidity Asset to be recovered from a liquidation based on current oracle prices.\n@return The minimum amount of Liquidity Asset that can be expected by swapping Collateral Asset."
                  },
                  "functionSelector": "c296dcba",
                  "id": 487,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getExpectedAmountRecovered",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 483,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19010:2:0"
                  },
                  "returnParameters": {
                    "id": 486,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 485,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 487,
                        "src": "19036:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 484,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19036:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19035:9:0"
                  },
                  "scope": 520,
                  "src": "18975:70:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 488,
                    "nodeType": "StructuredDocumentation",
                    "src": "19051:464:0",
                    "text": "@dev    Returns information of the next payment amount.\n@return The entitled interest of the next payment (Principal + Interest only when the next payment is last payment of the Loan).\n@return The entitled principal amount needed to be paid in the next payment.\n@return The entitled interest amount needed to be paid in the next payment.\n@return The payment due date.\n@return Whether the payment is late."
                  },
                  "functionSelector": "4ae01cdc",
                  "id": 501,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getNextPayment",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 489,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19543:2:0"
                  },
                  "returnParameters": {
                    "id": 500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 491,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19569:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 490,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19569:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 493,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19578:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 492,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19578:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 495,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19587:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 494,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19587:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 497,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19596:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 496,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19596:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 499,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19605:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 498,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "19605:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19568:42:0"
                  },
                  "scope": 520,
                  "src": "19520:91:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 502,
                    "nodeType": "StructuredDocumentation",
                    "src": "19617:225:0",
                    "text": "@dev    Returns the information of a full payment amount.\n@return total     Principal and interest owed, combined.\n@return principal Principal owed.\n@return interest  Interest owed."
                  },
                  "functionSelector": "77903e3b",
                  "id": 511,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getFullPayment",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 503,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19870:2:0"
                  },
                  "returnParameters": {
                    "id": 510,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 505,
                        "mutability": "mutable",
                        "name": "total",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 511,
                        "src": "19896:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 504,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19896:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 507,
                        "mutability": "mutable",
                        "name": "principal",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 511,
                        "src": "19911:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 506,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19911:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 509,
                        "mutability": "mutable",
                        "name": "interest",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 511,
                        "src": "19930:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 508,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19930:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19895:52:0"
                  },
                  "scope": 520,
                  "src": "19847:101:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 512,
                    "nodeType": "StructuredDocumentation",
                    "src": "19954:295:0",
                    "text": "@dev    Calculates the collateral required to draw down amount.\n@param  amt The amount of the Liquidity Asset to draw down from the FundingLocker.\n@return The amount of the Collateral Asset required to post in the CollateralLocker for a given drawdown amount."
                  },
                  "functionSelector": "da9bf6e0",
                  "id": 519,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collateralRequiredForDrawdown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 515,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 514,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 519,
                        "src": "20293:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 513,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20293:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20292:13:0"
                  },
                  "returnParameters": {
                    "id": 518,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 517,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 519,
                        "src": "20329:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 516,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20329:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20328:9:0"
                  },
                  "scope": 520,
                  "src": "20254:84:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "7157:13184:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 521,
                "nodeType": "StructuredDocumentation",
                "src": "20616:55:0",
                "text": "@title DebtLocker holds custody of LoanFDT tokens."
              },
              "fullyImplemented": false,
              "id": 588,
              "linearizedBaseContracts": [
                588
              ],
              "name": "IDebtLocker",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 522,
                    "nodeType": "StructuredDocumentation",
                    "src": "20700:77:0",
                    "text": "@dev The Loan contract this locker is holding tokens for."
                  },
                  "functionSelector": "d285b7b4",
                  "id": 527,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 523,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20795:2:0"
                  },
                  "returnParameters": {
                    "id": 526,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 525,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 527,
                        "src": "20821:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILoan_$520",
                          "typeString": "contract ILoan"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 524,
                          "name": "ILoan",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 520,
                          "src": "20821:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ILoan_$520",
                            "typeString": "contract ILoan"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20820:7:0"
                  },
                  "scope": 588,
                  "src": "20782:46:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 528,
                    "nodeType": "StructuredDocumentation",
                    "src": "20834:67:0",
                    "text": "@dev The Liquidity Asset this locker can claim."
                  },
                  "functionSelector": "209b2bca",
                  "id": 533,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 529,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20929:2:0"
                  },
                  "returnParameters": {
                    "id": 532,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 531,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 533,
                        "src": "20955:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 530,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "20955:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20954:8:0"
                  },
                  "scope": 588,
                  "src": "20906:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 534,
                    "nodeType": "StructuredDocumentation",
                    "src": "20969:61:0",
                    "text": "@dev The owner of this Locker (the Pool)."
                  },
                  "functionSelector": "16f0115b",
                  "id": 539,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 535,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21048:2:0"
                  },
                  "returnParameters": {
                    "id": 538,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 537,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 539,
                        "src": "21074:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 536,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21074:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21073:9:0"
                  },
                  "scope": 588,
                  "src": "21035:48:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 540,
                    "nodeType": "StructuredDocumentation",
                    "src": "21089:89:0",
                    "text": "@dev The Loan total principal paid at last time `claim()` was called."
                  },
                  "functionSelector": "6cb249a6",
                  "id": 545,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastPrincipalPaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 541,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21209:2:0"
                  },
                  "returnParameters": {
                    "id": 544,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 543,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 545,
                        "src": "21235:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 542,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21235:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21234:9:0"
                  },
                  "scope": 588,
                  "src": "21183:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 546,
                    "nodeType": "StructuredDocumentation",
                    "src": "21250:88:0",
                    "text": "@dev The Loan total interest paid at last time `claim()` was called."
                  },
                  "functionSelector": "2de520d7",
                  "id": 551,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastInterestPaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 547,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21368:2:0"
                  },
                  "returnParameters": {
                    "id": 550,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 549,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 551,
                        "src": "21394:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 548,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21394:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21393:9:0"
                  },
                  "scope": 588,
                  "src": "21343:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 552,
                    "nodeType": "StructuredDocumentation",
                    "src": "21409:84:0",
                    "text": "@dev The Loan total fees paid at last time `claim()` was called."
                  },
                  "functionSelector": "e77601b9",
                  "id": 557,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastFeePaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 553,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21518:2:0"
                  },
                  "returnParameters": {
                    "id": 556,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 555,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 557,
                        "src": "21544:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 554,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21544:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21543:9:0"
                  },
                  "scope": 588,
                  "src": "21498:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 558,
                    "nodeType": "StructuredDocumentation",
                    "src": "21559:90:0",
                    "text": "@dev The Loan total excess returned at last time `claim()` was called."
                  },
                  "functionSelector": "b2644fbc",
                  "id": 563,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastExcessReturned",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 559,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21681:2:0"
                  },
                  "returnParameters": {
                    "id": 562,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 561,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 563,
                        "src": "21707:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 560,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21707:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21706:9:0"
                  },
                  "scope": 588,
                  "src": "21654:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 564,
                    "nodeType": "StructuredDocumentation",
                    "src": "21722:91:0",
                    "text": "@dev The Loan total default suffered at last time `claim()` was called."
                  },
                  "functionSelector": "3dedc1b0",
                  "id": 569,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastDefaultSuffered",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 565,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21846:2:0"
                  },
                  "returnParameters": {
                    "id": 568,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 567,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 569,
                        "src": "21872:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 566,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21872:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21871:9:0"
                  },
                  "scope": 588,
                  "src": "21818:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 570,
                    "nodeType": "StructuredDocumentation",
                    "src": "21887:112:0",
                    "text": "@dev Then Liquidity Asset (a.k.a. loan asset) recovered from liquidation of Loan collateral."
                  },
                  "functionSelector": "f5396d96",
                  "id": 575,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastAmountRecovered",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 571,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "22032:2:0"
                  },
                  "returnParameters": {
                    "id": 574,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 573,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 575,
                        "src": "22058:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 572,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22058:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "22057:9:0"
                  },
                  "scope": 588,
                  "src": "22004:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 576,
                    "nodeType": "StructuredDocumentation",
                    "src": "22073:451:0",
                    "text": "@dev    Claims funds distribution for Loan via LoanFDT. \n@dev    Only the Pool can call this function. \n@return [0] => Total Claimed.\n[1] => Interest Claimed.\n[2] => Principal Claimed.\n[3] => Pool Delegate Fee Claimed.\n[4] => Excess Returned Claimed.\n[5] => Amount Recovered (from Liquidation).\n[6] => Default Suffered."
                  },
                  "functionSelector": "4e71d92d",
                  "id": 583,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "claim",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 577,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "22543:2:0"
                  },
                  "returnParameters": {
                    "id": 582,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 581,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 583,
                        "src": "22564:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                          "typeString": "uint256[7]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 578,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "22564:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 580,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 579,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22572:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "22564:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                            "typeString": "uint256[7]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "22563:19:0"
                  },
                  "scope": 588,
                  "src": "22529:54:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 584,
                    "nodeType": "StructuredDocumentation",
                    "src": "22589:126:0",
                    "text": "@dev Liquidates a Loan that is held by this contract. \n@dev Only the Pool can call this function. "
                  },
                  "functionSelector": "175f8329",
                  "id": 587,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "triggerDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 585,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "22743:2:0"
                  },
                  "returnParameters": {
                    "id": 586,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "22754:0:0"
                  },
                  "scope": 588,
                  "src": "22720:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "20671:2087:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 589,
                "nodeType": "StructuredDocumentation",
                "src": "22854:71:0",
                "text": "@title SubFactory creates instances downstream of another factory."
              },
              "fullyImplemented": false,
              "id": 596,
              "linearizedBaseContracts": [
                596
              ],
              "name": "ISubFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 590,
                    "nodeType": "StructuredDocumentation",
                    "src": "22954:48:0",
                    "text": "@dev The type of the factory"
                  },
                  "functionSelector": "64e1fd55",
                  "id": 595,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryType",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 591,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "23027:2:0"
                  },
                  "returnParameters": {
                    "id": 594,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 593,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 595,
                        "src": "23053:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 592,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "23053:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "23052:7:0"
                  },
                  "scope": 596,
                  "src": "23007:53:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "22925:138:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 598,
                    "name": "ISubFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 596,
                    "src": "23342:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISubFactory_$596",
                      "typeString": "contract ISubFactory"
                    }
                  },
                  "id": 599,
                  "nodeType": "InheritanceSpecifier",
                  "src": "23342:11:0"
                }
              ],
              "contractDependencies": [
                596
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 597,
                "nodeType": "StructuredDocumentation",
                "src": "23255:55:0",
                "text": "@title DebtLockerFactory instantiates DebtLockers."
              },
              "fullyImplemented": false,
              "id": 640,
              "linearizedBaseContracts": [
                640,
                596
              ],
              "name": "IDebtLockerFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 600,
                    "nodeType": "StructuredDocumentation",
                    "src": "23361:249:0",
                    "text": "@dev   Emits an event indicating a DebtLocker was created.\n@param owner      The owner of the DebtLocker.\n@param debtLocker The address of the DebtLocker.\n@param loan       The Loan tied to the DebtLocker."
                  },
                  "id": 608,
                  "name": "DebtLockerCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 607,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 602,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 608,
                        "src": "23639:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 601,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23639:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 604,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 608,
                        "src": "23662:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 603,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23662:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 606,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 608,
                        "src": "23682:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 605,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23682:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "23638:57:0"
                  },
                  "src": "23615:81:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 609,
                    "nodeType": "StructuredDocumentation",
                    "src": "23702:139:0",
                    "text": "@param  debtLocker The address of a DebtLocker.\n@return The address of the owner of DebtLocker at `debtLocker`."
                  },
                  "functionSelector": "666e1b39",
                  "id": 616,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 612,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 611,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 616,
                        "src": "23861:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 610,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23861:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "23860:20:0"
                  },
                  "returnParameters": {
                    "id": 615,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 614,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 616,
                        "src": "23904:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 613,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23904:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "23903:9:0"
                  },
                  "scope": 640,
                  "src": "23846:67:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 617,
                    "nodeType": "StructuredDocumentation",
                    "src": "23919:106:0",
                    "text": "@param  debtLocker Some address.\n@return Whether `debtLocker` is a DebtLocker."
                  },
                  "functionSelector": "2ec63d7c",
                  "id": 624,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 620,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 619,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 624,
                        "src": "24048:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 618,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "24048:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24047:20:0"
                  },
                  "returnParameters": {
                    "id": 623,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 622,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 624,
                        "src": "24091:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 621,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "24091:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24090:6:0"
                  },
                  "scope": 640,
                  "src": "24030:67:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    595
                  ],
                  "body": null,
                  "documentation": {
                    "id": 625,
                    "nodeType": "StructuredDocumentation",
                    "src": "24103:88:0",
                    "text": "@dev The type of the factory (i.e FactoryType::DEBT_LOCKER_FACTORY)."
                  },
                  "functionSelector": "64e1fd55",
                  "id": 631,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryType",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 627,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "24228:8:0"
                  },
                  "parameters": {
                    "id": 626,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "24216:2:0"
                  },
                  "returnParameters": {
                    "id": 630,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 629,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 631,
                        "src": "24251:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 628,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "24251:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24250:7:0"
                  },
                  "scope": 640,
                  "src": "24196:62:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 632,
                    "nodeType": "StructuredDocumentation",
                    "src": "24264:250:0",
                    "text": "@dev    Instantiates a DebtLocker. \n@dev    It emits a `DebtLockerCreated` event. \n@param  loan       The Loan this DebtLocker will be tied to.\n@return debtLocker The address of the instantiated DebtLocker."
                  },
                  "functionSelector": "19eb783a",
                  "id": 639,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "newLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 635,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 634,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 639,
                        "src": "24538:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 633,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "24538:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24537:14:0"
                  },
                  "returnParameters": {
                    "id": 638,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 637,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 639,
                        "src": "24570:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 636,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "24570:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24569:20:0"
                  },
                  "scope": 640,
                  "src": "24519:71:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "23310:1283:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": null,
              "fullyImplemented": true,
              "id": 661,
              "linearizedBaseContracts": [
                661
              ],
              "name": "SafeMathInt",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 659,
                    "nodeType": "Block",
                    "src": "24769:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 650,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 648,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 642,
                                "src": "24787:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 649,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "24792:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "24787:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534d493a4e4547",
                              "id": 651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "24795:9:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7f8f36ed7822abb9a7af4802b9b67b650ae68495c0b71826aaa5876de2b35b33",
                                "typeString": "literal_string \"SMI:NEG\""
                              },
                              "value": "SMI:NEG"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7f8f36ed7822abb9a7af4802b9b67b650ae68495c0b71826aaa5876de2b35b33",
                                "typeString": "literal_string \"SMI:NEG\""
                              }
                            ],
                            "id": 647,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "24779:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24779:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 653,
                        "nodeType": "ExpressionStatement",
                        "src": "24779:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 656,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 642,
                              "src": "24830:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 655,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "24822:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 654,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "24822:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24822:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 646,
                        "id": 658,
                        "nodeType": "Return",
                        "src": "24815:17:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 660,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint256Safe",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 643,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 642,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 660,
                        "src": "24727:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 641,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24727:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24726:10:0"
                  },
                  "returnParameters": {
                    "id": 646,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 645,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 660,
                        "src": "24760:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 644,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24760:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24759:9:0"
                  },
                  "scope": 661,
                  "src": "24704:135:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7393,
              "src": "24677:165:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": null,
              "fullyImplemented": true,
              "id": 684,
              "linearizedBaseContracts": [
                684
              ],
              "name": "SafeMathUint",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 682,
                    "nodeType": "Block",
                    "src": "25021:66:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 668,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 666,
                            "src": "25031:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 671,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "25042:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 670,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "25035:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int256_$",
                                "typeString": "type(int256)"
                              },
                              "typeName": {
                                "id": 669,
                                "name": "int256",
                                "nodeType": "ElementaryTypeName",
                                "src": "25035:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 672,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25035:9:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "25031:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 674,
                        "nodeType": "ExpressionStatement",
                        "src": "25031:13:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 676,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 666,
                                "src": "25062:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 677,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "25067:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "25062:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534d553a4f4f42",
                              "id": 679,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25070:9:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e1296ae3df521f6e35a0f57bb23513ad91c86287a7ab7f6fbae7c6861fccaa61",
                                "typeString": "literal_string \"SMU:OOB\""
                              },
                              "value": "SMU:OOB"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e1296ae3df521f6e35a0f57bb23513ad91c86287a7ab7f6fbae7c6861fccaa61",
                                "typeString": "literal_string \"SMU:OOB\""
                              }
                            ],
                            "id": 675,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "25054:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25054:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 681,
                        "nodeType": "ExpressionStatement",
                        "src": "25054:26:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 683,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt256Safe",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 664,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 663,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 683,
                        "src": "24977:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 662,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24977:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24976:11:0"
                  },
                  "returnParameters": {
                    "id": 667,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 666,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 683,
                        "src": "25011:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 665,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25011:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "25010:10:0"
                  },
                  "scope": 684,
                  "src": "24955:132:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7393,
              "src": "24927:163:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 685,
                "nodeType": "StructuredDocumentation",
                "src": "25193:563:0",
                "text": " @dev Wrappers over Solidity's arithmetic operations with added overflow\n checks.\n Arithmetic operations in Solidity wrap on overflow. This can easily result\n in bugs, because programmers usually assume that an overflow raises an\n error, which is the standard behavior in high level programming languages.\n `SafeMath` restores this intuition by reverting the transaction when an\n operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."
              },
              "fullyImplemented": true,
              "id": 878,
              "linearizedBaseContracts": [
                878
              ],
              "name": "SafeMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 710,
                    "nodeType": "Block",
                    "src": "26076:109:0",
                    "statements": [
                      {
                        "assignments": [
                          696
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 696,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 710,
                            "src": "26086:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 695,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "26086:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 700,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 697,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 688,
                            "src": "26098:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 698,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 690,
                            "src": "26102:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26098:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "26086:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 704,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 702,
                                "name": "c",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 696,
                                "src": "26121:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 703,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 688,
                                "src": "26126:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "26121:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206164646974696f6e206f766572666c6f77",
                              "id": 705,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26129:29:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a",
                                "typeString": "literal_string \"SafeMath: addition overflow\""
                              },
                              "value": "SafeMath: addition overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a",
                                "typeString": "literal_string \"SafeMath: addition overflow\""
                              }
                            ],
                            "id": 701,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "26113:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26113:46:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 707,
                        "nodeType": "ExpressionStatement",
                        "src": "26113:46:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 708,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 696,
                          "src": "26177:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 694,
                        "id": 709,
                        "nodeType": "Return",
                        "src": "26170:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 686,
                    "nodeType": "StructuredDocumentation",
                    "src": "25780:224:0",
                    "text": " @dev Returns the addition of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow."
                  },
                  "id": 711,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 691,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 688,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 711,
                        "src": "26022:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 687,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26022:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 690,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 711,
                        "src": "26033:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 689,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26033:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26021:22:0"
                  },
                  "returnParameters": {
                    "id": 694,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 693,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 711,
                        "src": "26067:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 692,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26067:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26066:9:0"
                  },
                  "scope": 878,
                  "src": "26009:176:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 727,
                    "nodeType": "Block",
                    "src": "26523:67:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 722,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 714,
                              "src": "26544:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 723,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 716,
                              "src": "26547:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a207375627472616374696f6e206f766572666c6f77",
                              "id": 724,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26550:32:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862",
                                "typeString": "literal_string \"SafeMath: subtraction overflow\""
                              },
                              "value": "SafeMath: subtraction overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862",
                                "typeString": "literal_string \"SafeMath: subtraction overflow\""
                              }
                            ],
                            "id": 721,
                            "name": "sub",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              728,
                              756
                            ],
                            "referencedDeclaration": 756,
                            "src": "26540:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26540:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 720,
                        "id": 726,
                        "nodeType": "Return",
                        "src": "26533:50:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 712,
                    "nodeType": "StructuredDocumentation",
                    "src": "26191:260:0",
                    "text": " @dev Returns the subtraction of two unsigned integers, reverting on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."
                  },
                  "id": 728,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 717,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 714,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 728,
                        "src": "26469:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 713,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26469:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 716,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 728,
                        "src": "26480:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 715,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26480:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26468:22:0"
                  },
                  "returnParameters": {
                    "id": 720,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 719,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 728,
                        "src": "26514:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 718,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26514:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26513:9:0"
                  },
                  "scope": 878,
                  "src": "26456:134:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 755,
                    "nodeType": "Block",
                    "src": "26976:92:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 743,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 741,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 733,
                                "src": "26994:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 742,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 731,
                                "src": "26999:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "26994:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 744,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 735,
                              "src": "27002:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 740,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "26986:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26986:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 746,
                        "nodeType": "ExpressionStatement",
                        "src": "26986:29:0"
                      },
                      {
                        "assignments": [
                          748
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 748,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 755,
                            "src": "27025:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 747,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "27025:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 752,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 749,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 731,
                            "src": "27037:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 750,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 733,
                            "src": "27041:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27037:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "27025:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 753,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 748,
                          "src": "27060:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 739,
                        "id": 754,
                        "nodeType": "Return",
                        "src": "27053:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 729,
                    "nodeType": "StructuredDocumentation",
                    "src": "26596:280:0",
                    "text": " @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."
                  },
                  "id": 756,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 736,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 731,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 756,
                        "src": "26894:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 730,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26894:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 733,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 756,
                        "src": "26905:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 732,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26905:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 735,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 756,
                        "src": "26916:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 734,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "26916:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26893:50:0"
                  },
                  "returnParameters": {
                    "id": 739,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 738,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 756,
                        "src": "26967:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 737,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26967:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26966:9:0"
                  },
                  "scope": 878,
                  "src": "26881:187:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 790,
                    "nodeType": "Block",
                    "src": "27382:392:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 766,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 759,
                            "src": "27614:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "27619:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "27614:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 772,
                        "nodeType": "IfStatement",
                        "src": "27610:45:0",
                        "trueBody": {
                          "id": 771,
                          "nodeType": "Block",
                          "src": "27622:33:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 769,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "27643:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 765,
                              "id": 770,
                              "nodeType": "Return",
                              "src": "27636:8:0"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          774
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 774,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 790,
                            "src": "27665:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 773,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "27665:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 778,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 777,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 775,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 759,
                            "src": "27677:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 776,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 761,
                            "src": "27681:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27677:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "27665:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 784,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 782,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 780,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 774,
                                  "src": "27700:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 781,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 759,
                                  "src": "27704:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27700:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 783,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 761,
                                "src": "27709:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "27700:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 785,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "27712:35:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3",
                                "typeString": "literal_string \"SafeMath: multiplication overflow\""
                              },
                              "value": "SafeMath: multiplication overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3",
                                "typeString": "literal_string \"SafeMath: multiplication overflow\""
                              }
                            ],
                            "id": 779,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "27692:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 786,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27692:56:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 787,
                        "nodeType": "ExpressionStatement",
                        "src": "27692:56:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 788,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 774,
                          "src": "27766:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 765,
                        "id": 789,
                        "nodeType": "Return",
                        "src": "27759:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 757,
                    "nodeType": "StructuredDocumentation",
                    "src": "27074:236:0",
                    "text": " @dev Returns the multiplication of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `*` operator.\n Requirements:\n - Multiplication cannot overflow."
                  },
                  "id": 791,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 762,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 759,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 791,
                        "src": "27328:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 758,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27328:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 761,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 791,
                        "src": "27339:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 760,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27339:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "27327:22:0"
                  },
                  "returnParameters": {
                    "id": 765,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 764,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 791,
                        "src": "27373:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 763,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27373:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "27372:9:0"
                  },
                  "scope": 878,
                  "src": "27315:459:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 807,
                    "nodeType": "Block",
                    "src": "28303:63:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 802,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 794,
                              "src": "28324:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 803,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 796,
                              "src": "28327:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206469766973696f6e206279207a65726f",
                              "id": 804,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "28330:28:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f",
                                "typeString": "literal_string \"SafeMath: division by zero\""
                              },
                              "value": "SafeMath: division by zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f",
                                "typeString": "literal_string \"SafeMath: division by zero\""
                              }
                            ],
                            "id": 801,
                            "name": "div",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              808,
                              836
                            ],
                            "referencedDeclaration": 836,
                            "src": "28320:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28320:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 800,
                        "id": 806,
                        "nodeType": "Return",
                        "src": "28313:46:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 792,
                    "nodeType": "StructuredDocumentation",
                    "src": "27780:451:0",
                    "text": " @dev Returns the integer division of two unsigned integers. Reverts on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 808,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 797,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 794,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 808,
                        "src": "28249:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 793,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28249:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 796,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 808,
                        "src": "28260:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 795,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28260:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "28248:22:0"
                  },
                  "returnParameters": {
                    "id": 800,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 799,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 808,
                        "src": "28294:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 798,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28294:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "28293:9:0"
                  },
                  "scope": 878,
                  "src": "28236:130:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 835,
                    "nodeType": "Block",
                    "src": "28943:177:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 821,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 813,
                                "src": "28961:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 822,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "28965:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "28961:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 824,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 815,
                              "src": "28968:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 820,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "28953:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28953:28:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 826,
                        "nodeType": "ExpressionStatement",
                        "src": "28953:28:0"
                      },
                      {
                        "assignments": [
                          828
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 828,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 835,
                            "src": "28991:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 827,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "28991:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 832,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 829,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 811,
                            "src": "29003:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 830,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 813,
                            "src": "29007:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29003:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "28991:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 833,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 828,
                          "src": "29112:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 819,
                        "id": 834,
                        "nodeType": "Return",
                        "src": "29105:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 809,
                    "nodeType": "StructuredDocumentation",
                    "src": "28372:471:0",
                    "text": " @dev Returns the integer division of two unsigned integers. Reverts with custom message on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 836,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 816,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 811,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 836,
                        "src": "28861:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 810,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28861:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 813,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 836,
                        "src": "28872:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 812,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28872:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 815,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 836,
                        "src": "28883:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 814,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "28883:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "28860:50:0"
                  },
                  "returnParameters": {
                    "id": 819,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 818,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 836,
                        "src": "28934:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 817,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28934:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "28933:9:0"
                  },
                  "scope": 878,
                  "src": "28848:272:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 852,
                    "nodeType": "Block",
                    "src": "29638:61:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 847,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 839,
                              "src": "29659:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 848,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 841,
                              "src": "29662:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206d6f64756c6f206279207a65726f",
                              "id": 849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "29665:26:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832",
                                "typeString": "literal_string \"SafeMath: modulo by zero\""
                              },
                              "value": "SafeMath: modulo by zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832",
                                "typeString": "literal_string \"SafeMath: modulo by zero\""
                              }
                            ],
                            "id": 846,
                            "name": "mod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              853,
                              877
                            ],
                            "referencedDeclaration": 877,
                            "src": "29655:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29655:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 845,
                        "id": 851,
                        "nodeType": "Return",
                        "src": "29648:44:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 837,
                    "nodeType": "StructuredDocumentation",
                    "src": "29126:440:0",
                    "text": " @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n Reverts when dividing by zero.\n Counterpart to Solidity's `%` operator. This function uses a `revert`\n opcode (which leaves remaining gas untouched) while Solidity uses an\n invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 853,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 842,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 839,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 853,
                        "src": "29584:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 838,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29584:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 841,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 853,
                        "src": "29595:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 840,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29595:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29583:22:0"
                  },
                  "returnParameters": {
                    "id": 845,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 844,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 853,
                        "src": "29629:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 843,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29629:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29628:9:0"
                  },
                  "scope": 878,
                  "src": "29571:128:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 876,
                    "nodeType": "Block",
                    "src": "30265:68:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 868,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 866,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 858,
                                "src": "30283:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 867,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "30288:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "30283:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 869,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 860,
                              "src": "30291:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 865,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "30275:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 870,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30275:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 871,
                        "nodeType": "ExpressionStatement",
                        "src": "30275:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 872,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 856,
                            "src": "30321:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 873,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 858,
                            "src": "30325:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30321:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 864,
                        "id": 875,
                        "nodeType": "Return",
                        "src": "30314:12:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 854,
                    "nodeType": "StructuredDocumentation",
                    "src": "29705:460:0",
                    "text": " @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n Reverts with custom message when dividing by zero.\n Counterpart to Solidity's `%` operator. This function uses a `revert`\n opcode (which leaves remaining gas untouched) while Solidity uses an\n invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 877,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 861,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 856,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 877,
                        "src": "30183:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 855,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30183:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 858,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 877,
                        "src": "30194:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 857,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30194:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 860,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 877,
                        "src": "30205:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 859,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "30205:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "30182:50:0"
                  },
                  "returnParameters": {
                    "id": 864,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 863,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 877,
                        "src": "30256:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 862,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30256:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "30255:9:0"
                  },
                  "scope": 878,
                  "src": "30170:163:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7393,
              "src": "25757:4578:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 879,
                "nodeType": "StructuredDocumentation",
                "src": "30444:104:0",
                "text": " @title SignedSafeMath\n @dev Signed math operations with safety checks that revert on error."
              },
              "fullyImplemented": true,
              "id": 1055,
              "linearizedBaseContracts": [
                1055
              ],
              "name": "SignedSafeMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 885,
                  "mutability": "constant",
                  "name": "_INT256_MIN",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1055,
                  "src": "30578:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 880,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30578:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_minus_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const -578...(70 digits omitted)...9968"
                    },
                    "id": 884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 882,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "30616:2:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "30617:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_minus_2_by_1",
                        "typeString": "int_const -2"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "323535",
                      "id": 883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30620:3:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "255"
                    },
                    "src": "30616:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_minus_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const -578...(70 digits omitted)...9968"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 933,
                    "nodeType": "Block",
                    "src": "30933:490:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 895,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 888,
                            "src": "31165:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 896,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "31170:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "31165:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 901,
                        "nodeType": "IfStatement",
                        "src": "31161:45:0",
                        "trueBody": {
                          "id": 900,
                          "nodeType": "Block",
                          "src": "31173:33:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 898,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "31194:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 894,
                              "id": 899,
                              "nodeType": "Return",
                              "src": "31187:8:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 912,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "31224:30:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 910,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 906,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 903,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 888,
                                        "src": "31226:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 905,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "31231:2:0",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 904,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "31232:1:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_minus_1_by_1",
                                          "typeString": "int_const -1"
                                        }
                                      },
                                      "src": "31226:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 909,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 907,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 890,
                                        "src": "31237:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 908,
                                        "name": "_INT256_MIN",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 885,
                                        "src": "31242:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "31237:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "31226:27:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 911,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "31225:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 913,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31256:41:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954",
                                "typeString": "literal_string \"SignedSafeMath: multiplication overflow\""
                              },
                              "value": "SignedSafeMath: multiplication overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954",
                                "typeString": "literal_string \"SignedSafeMath: multiplication overflow\""
                              }
                            ],
                            "id": 902,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "31216:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31216:82:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 915,
                        "nodeType": "ExpressionStatement",
                        "src": "31216:82:0"
                      },
                      {
                        "assignments": [
                          917
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 917,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 933,
                            "src": "31309:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 916,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "31309:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 921,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 920,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 918,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 888,
                            "src": "31320:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 919,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 890,
                            "src": "31324:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "31320:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "31309:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 927,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 925,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 923,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 917,
                                  "src": "31343:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 924,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 888,
                                  "src": "31347:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "31343:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 926,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 890,
                                "src": "31352:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "31343:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 928,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31355:41:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954",
                                "typeString": "literal_string \"SignedSafeMath: multiplication overflow\""
                              },
                              "value": "SignedSafeMath: multiplication overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954",
                                "typeString": "literal_string \"SignedSafeMath: multiplication overflow\""
                              }
                            ],
                            "id": 922,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "31335:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31335:62:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 930,
                        "nodeType": "ExpressionStatement",
                        "src": "31335:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 931,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 917,
                          "src": "31415:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 894,
                        "id": 932,
                        "nodeType": "Return",
                        "src": "31408:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 886,
                    "nodeType": "StructuredDocumentation",
                    "src": "30630:234:0",
                    "text": " @dev Returns the multiplication of two signed integers, reverting on\n overflow.\n Counterpart to Solidity's `*` operator.\n Requirements:\n - Multiplication cannot overflow."
                  },
                  "id": 934,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 891,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 888,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 934,
                        "src": "30882:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 887,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30882:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 890,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 934,
                        "src": "30892:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 889,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30892:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "30881:20:0"
                  },
                  "returnParameters": {
                    "id": 894,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 893,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 934,
                        "src": "30925:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 892,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30925:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "30924:8:0"
                  },
                  "scope": 1055,
                  "src": "30869:554:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 973,
                    "nodeType": "Block",
                    "src": "31947:200:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 947,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 945,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 939,
                                "src": "31965:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 946,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "31970:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "31965:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206469766973696f6e206279207a65726f",
                              "id": 948,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31973:34:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ebc4d0068c2e029285c70894a725032247a74fcdc822ba305ea67dbddf7750bd",
                                "typeString": "literal_string \"SignedSafeMath: division by zero\""
                              },
                              "value": "SignedSafeMath: division by zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ebc4d0068c2e029285c70894a725032247a74fcdc822ba305ea67dbddf7750bd",
                                "typeString": "literal_string \"SignedSafeMath: division by zero\""
                              }
                            ],
                            "id": 944,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "31957:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31957:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 950,
                        "nodeType": "ExpressionStatement",
                        "src": "31957:51:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 961,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "32026:30:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 959,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 955,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 952,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 939,
                                        "src": "32028:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 954,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "32033:2:0",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 953,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "32034:1:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_minus_1_by_1",
                                          "typeString": "int_const -1"
                                        }
                                      },
                                      "src": "32028:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 958,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 956,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 937,
                                        "src": "32039:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 957,
                                        "name": "_INT256_MIN",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 885,
                                        "src": "32044:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "32039:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "32028:27:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 960,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "32027:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f77",
                              "id": 962,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "32058:35:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7bc0f3df013376568eb9f7cb8999198097051f79bdb4d07d83447767f5224b81",
                                "typeString": "literal_string \"SignedSafeMath: division overflow\""
                              },
                              "value": "SignedSafeMath: division overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7bc0f3df013376568eb9f7cb8999198097051f79bdb4d07d83447767f5224b81",
                                "typeString": "literal_string \"SignedSafeMath: division overflow\""
                              }
                            ],
                            "id": 951,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "32018:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 963,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32018:76:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 964,
                        "nodeType": "ExpressionStatement",
                        "src": "32018:76:0"
                      },
                      {
                        "assignments": [
                          966
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 966,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 973,
                            "src": "32105:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 965,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "32105:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 970,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 967,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 937,
                            "src": "32116:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 968,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 939,
                            "src": "32120:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "32116:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32105:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 971,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 966,
                          "src": "32139:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 943,
                        "id": 972,
                        "nodeType": "Return",
                        "src": "32132:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 935,
                    "nodeType": "StructuredDocumentation",
                    "src": "31429:449:0",
                    "text": " @dev Returns the integer division of two signed integers. Reverts on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 974,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 940,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 937,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 974,
                        "src": "31896:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 936,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31896:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 939,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 974,
                        "src": "31906:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 938,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31906:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "31895:20:0"
                  },
                  "returnParameters": {
                    "id": 943,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 942,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 974,
                        "src": "31939:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 941,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31939:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "31938:8:0"
                  },
                  "scope": 1055,
                  "src": "31883:264:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1013,
                    "nodeType": "Block",
                    "src": "32450:149:0",
                    "statements": [
                      {
                        "assignments": [
                          985
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 985,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1013,
                            "src": "32460:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 984,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "32460:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 989,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 986,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 977,
                            "src": "32471:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 987,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 979,
                            "src": "32475:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "32471:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32460:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1007,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 997,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 993,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 991,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 979,
                                        "src": "32495:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 992,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "32500:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "32495:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 996,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 994,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 985,
                                        "src": "32505:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 995,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 977,
                                        "src": "32510:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "32505:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "32495:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 998,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "32494:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 1005,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1001,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 999,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 979,
                                        "src": "32517:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1000,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "32521:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "32517:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1004,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1002,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 985,
                                        "src": "32526:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 1003,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 977,
                                        "src": "32530:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "32526:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "32517:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 1006,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "32516:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "32494:38:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77",
                              "id": 1008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "32534:38:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_dfe37ab0612d67daeef366062296f3ebcaf7e2cc3eb392bf66a6cb5a7bed3bcd",
                                "typeString": "literal_string \"SignedSafeMath: subtraction overflow\""
                              },
                              "value": "SignedSafeMath: subtraction overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_dfe37ab0612d67daeef366062296f3ebcaf7e2cc3eb392bf66a6cb5a7bed3bcd",
                                "typeString": "literal_string \"SignedSafeMath: subtraction overflow\""
                              }
                            ],
                            "id": 990,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "32486:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32486:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1010,
                        "nodeType": "ExpressionStatement",
                        "src": "32486:87:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1011,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 985,
                          "src": "32591:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 983,
                        "id": 1012,
                        "nodeType": "Return",
                        "src": "32584:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 975,
                    "nodeType": "StructuredDocumentation",
                    "src": "32153:228:0",
                    "text": " @dev Returns the subtraction of two signed integers, reverting on\n overflow.\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."
                  },
                  "id": 1014,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 980,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 977,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1014,
                        "src": "32399:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 976,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32399:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 979,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1014,
                        "src": "32409:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 978,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32409:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "32398:20:0"
                  },
                  "returnParameters": {
                    "id": 983,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 982,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1014,
                        "src": "32442:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 981,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32442:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "32441:8:0"
                  },
                  "scope": 1055,
                  "src": "32386:213:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1053,
                    "nodeType": "Block",
                    "src": "32896:146:0",
                    "statements": [
                      {
                        "assignments": [
                          1025
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1025,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1053,
                            "src": "32906:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1024,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "32906:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1029,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 1028,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1026,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1017,
                            "src": "32917:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1027,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1019,
                            "src": "32921:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "32917:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32906:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1047,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 1037,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1033,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1031,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1019,
                                        "src": "32941:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1032,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "32946:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "32941:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1036,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1034,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1025,
                                        "src": "32951:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 1035,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1017,
                                        "src": "32956:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "32951:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "32941:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 1038,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "32940:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 1045,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1041,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1039,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1019,
                                        "src": "32963:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1040,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "32967:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "32963:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1044,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1042,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1025,
                                        "src": "32972:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 1043,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1017,
                                        "src": "32976:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "32972:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "32963:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 1046,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "32962:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "32940:38:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77",
                              "id": 1048,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "32980:35:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_47c8d4a3974eee4fcf9925cffefc088ed6ac723b55fb65cf621edb1b7db7b8eb",
                                "typeString": "literal_string \"SignedSafeMath: addition overflow\""
                              },
                              "value": "SignedSafeMath: addition overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_47c8d4a3974eee4fcf9925cffefc088ed6ac723b55fb65cf621edb1b7db7b8eb",
                                "typeString": "literal_string \"SignedSafeMath: addition overflow\""
                              }
                            ],
                            "id": 1030,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "32932:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32932:84:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1050,
                        "nodeType": "ExpressionStatement",
                        "src": "32932:84:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1051,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1025,
                          "src": "33034:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 1023,
                        "id": 1052,
                        "nodeType": "Return",
                        "src": "33027:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1015,
                    "nodeType": "StructuredDocumentation",
                    "src": "32605:222:0",
                    "text": " @dev Returns the addition of two signed integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow."
                  },
                  "id": 1054,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1020,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1017,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1054,
                        "src": "32845:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1016,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32845:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1019,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1054,
                        "src": "32855:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1018,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32855:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "32844:20:0"
                  },
                  "returnParameters": {
                    "id": 1023,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1022,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1054,
                        "src": "32888:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1021,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32888:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "32887:8:0"
                  },
                  "scope": 1055,
                  "src": "32832:210:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7393,
              "src": "30549:2495:0"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": null,
              "fullyImplemented": true,
              "id": 1076,
              "linearizedBaseContracts": [
                1076
              ],
              "name": "Context",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1063,
                    "nodeType": "Block",
                    "src": "33747:34:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1060,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "33764:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "33764:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "functionReturnParameters": 1059,
                        "id": 1062,
                        "nodeType": "Return",
                        "src": "33757:17:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 1064,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgSender",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1056,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "33696:2:0"
                  },
                  "returnParameters": {
                    "id": 1059,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1058,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1064,
                        "src": "33730:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 1057,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "33730:15:0",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "33729:17:0"
                  },
                  "scope": 1076,
                  "src": "33677:104:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1074,
                    "nodeType": "Block",
                    "src": "33852:165:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1069,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "33862:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Context_$1076",
                            "typeString": "contract Context"
                          }
                        },
                        "id": 1070,
                        "nodeType": "ExpressionStatement",
                        "src": "33862:4:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1071,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "34002:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1072,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "34002:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "functionReturnParameters": 1068,
                        "id": 1073,
                        "nodeType": "Return",
                        "src": "33995:15:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 1075,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgData",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1065,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "33804:2:0"
                  },
                  "returnParameters": {
                    "id": 1068,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1067,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1075,
                        "src": "33838:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1066,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "33838:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "33837:14:0"
                  },
                  "scope": 1076,
                  "src": "33787:230:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 7393,
              "src": "33645:374:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1078,
                    "name": "Context",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1076,
                    "src": "35415:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Context_$1076",
                      "typeString": "contract Context"
                    }
                  },
                  "id": 1079,
                  "nodeType": "InheritanceSpecifier",
                  "src": "35415:7:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1080,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "35424:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 1081,
                  "nodeType": "InheritanceSpecifier",
                  "src": "35424:6:0"
                }
              ],
              "contractDependencies": [
                77,
                1076
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 1077,
                "nodeType": "StructuredDocumentation",
                "src": "34234:1162:0",
                "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin guidelines: functions revert instead\n of returning `false` on failure. This behavior is nonetheless conventional\n and does not conflict with the expectations of ERC20 applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."
              },
              "fullyImplemented": true,
              "id": 1574,
              "linearizedBaseContracts": [
                1574,
                77,
                1076
              ],
              "name": "ERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 1084,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1082,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "35443:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "35437:27:0",
                  "typeName": {
                    "id": 1083,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35456:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 1088,
                  "mutability": "mutable",
                  "name": "_balances",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35470:46:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 1087,
                    "keyType": {
                      "id": 1085,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "35479:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "35470:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 1086,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "35490:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1094,
                  "mutability": "mutable",
                  "name": "_allowances",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35523:69:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 1093,
                    "keyType": {
                      "id": 1089,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "35532:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "35523:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 1092,
                      "keyType": {
                        "id": 1090,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "35552:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "35543:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 1091,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "35563:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1096,
                  "mutability": "mutable",
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35599:28:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1095,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35599:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1098,
                  "mutability": "mutable",
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35634:20:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1097,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "35634:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1100,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35660:22:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1099,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "35660:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1102,
                  "mutability": "mutable",
                  "name": "_decimals",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35688:23:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1101,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "35688:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1122,
                    "nodeType": "Block",
                    "src": "36098:81:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1112,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1110,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1098,
                            "src": "36108:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1111,
                            "name": "name_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1105,
                            "src": "36116:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "36108:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1113,
                        "nodeType": "ExpressionStatement",
                        "src": "36108:13:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1114,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1100,
                            "src": "36131:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1115,
                            "name": "symbol_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1107,
                            "src": "36141:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "36131:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1117,
                        "nodeType": "ExpressionStatement",
                        "src": "36131:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1118,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1102,
                            "src": "36158:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3138",
                            "id": 1119,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "36170:2:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_18_by_1",
                              "typeString": "int_const 18"
                            },
                            "value": "18"
                          },
                          "src": "36158:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 1121,
                        "nodeType": "ExpressionStatement",
                        "src": "36158:14:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1103,
                    "nodeType": "StructuredDocumentation",
                    "src": "35718:311:0",
                    "text": " @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n a default value of 18.\n To select a different value for {decimals}, use {_setupDecimals}.\n All three of these values are immutable: they can only be set once during\n construction."
                  },
                  "id": 1123,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1108,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1105,
                        "mutability": "mutable",
                        "name": "name_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1123,
                        "src": "36047:19:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1104,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "36047:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1107,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1123,
                        "src": "36068:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1106,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "36068:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "36046:44:0"
                  },
                  "returnParameters": {
                    "id": 1109,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "36098:0:0"
                  },
                  "scope": 1574,
                  "src": "36034:145:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1131,
                    "nodeType": "Block",
                    "src": "36296:29:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1129,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1098,
                          "src": "36313:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 1128,
                        "id": 1130,
                        "nodeType": "Return",
                        "src": "36306:12:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1124,
                    "nodeType": "StructuredDocumentation",
                    "src": "36185:54:0",
                    "text": " @dev Returns the name of the token."
                  },
                  "functionSelector": "06fdde03",
                  "id": 1132,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1125,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "36257:2:0"
                  },
                  "returnParameters": {
                    "id": 1128,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1127,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1132,
                        "src": "36281:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1126,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "36281:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "36280:15:0"
                  },
                  "scope": 1574,
                  "src": "36244:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1140,
                    "nodeType": "Block",
                    "src": "36492:31:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1138,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1100,
                          "src": "36509:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 1137,
                        "id": 1139,
                        "nodeType": "Return",
                        "src": "36502:14:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1133,
                    "nodeType": "StructuredDocumentation",
                    "src": "36331:102:0",
                    "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
                  },
                  "functionSelector": "95d89b41",
                  "id": 1141,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1134,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "36453:2:0"
                  },
                  "returnParameters": {
                    "id": 1137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1136,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1141,
                        "src": "36477:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1135,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "36477:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "36476:15:0"
                  },
                  "scope": 1574,
                  "src": "36438:85:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1149,
                    "nodeType": "Block",
                    "src": "37194:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1147,
                          "name": "_decimals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1102,
                          "src": "37211:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "functionReturnParameters": 1146,
                        "id": 1148,
                        "nodeType": "Return",
                        "src": "37204:16:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1142,
                    "nodeType": "StructuredDocumentation",
                    "src": "36529:612:0",
                    "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5,05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n called.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
                  },
                  "functionSelector": "313ce567",
                  "id": 1150,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1143,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "37163:2:0"
                  },
                  "returnParameters": {
                    "id": 1146,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1145,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1150,
                        "src": "37187:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 1144,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "37187:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37186:7:0"
                  },
                  "scope": 1574,
                  "src": "37146:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    8
                  ],
                  "body": {
                    "id": 1159,
                    "nodeType": "Block",
                    "src": "37349:36:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1157,
                          "name": "_totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1096,
                          "src": "37366:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1156,
                        "id": 1158,
                        "nodeType": "Return",
                        "src": "37359:19:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1151,
                    "nodeType": "StructuredDocumentation",
                    "src": "37233:49:0",
                    "text": " @dev See {IERC20-totalSupply}."
                  },
                  "functionSelector": "18160ddd",
                  "id": 1160,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1153,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "37322:8:0"
                  },
                  "parameters": {
                    "id": 1152,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "37307:2:0"
                  },
                  "returnParameters": {
                    "id": 1156,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1155,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1160,
                        "src": "37340:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1154,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "37340:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37339:9:0"
                  },
                  "scope": 1574,
                  "src": "37287:98:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    16
                  ],
                  "body": {
                    "id": 1173,
                    "nodeType": "Block",
                    "src": "37518:42:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1169,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1088,
                            "src": "37535:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1171,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1170,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1163,
                            "src": "37545:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "37535:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1168,
                        "id": 1172,
                        "nodeType": "Return",
                        "src": "37528:25:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1161,
                    "nodeType": "StructuredDocumentation",
                    "src": "37391:47:0",
                    "text": " @dev See {IERC20-balanceOf}."
                  },
                  "functionSelector": "70a08231",
                  "id": 1174,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1165,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "37491:8:0"
                  },
                  "parameters": {
                    "id": 1164,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1163,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1174,
                        "src": "37462:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1162,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "37462:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37461:17:0"
                  },
                  "returnParameters": {
                    "id": 1168,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1167,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1174,
                        "src": "37509:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1166,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "37509:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37508:9:0"
                  },
                  "scope": 1574,
                  "src": "37443:117:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    26
                  ],
                  "body": {
                    "id": 1194,
                    "nodeType": "Block",
                    "src": "37855:80:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1186,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "37875:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 1187,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "37875:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1188,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1177,
                              "src": "37889:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1189,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1179,
                              "src": "37900:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1185,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1395,
                            "src": "37865:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37865:42:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1191,
                        "nodeType": "ExpressionStatement",
                        "src": "37865:42:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "37924:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1184,
                        "id": 1193,
                        "nodeType": "Return",
                        "src": "37917:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1175,
                    "nodeType": "StructuredDocumentation",
                    "src": "37566:192:0",
                    "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 1195,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1181,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "37831:8:0"
                  },
                  "parameters": {
                    "id": 1180,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1177,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1195,
                        "src": "37781:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1176,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "37781:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1179,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1195,
                        "src": "37800:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1178,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "37800:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37780:35:0"
                  },
                  "returnParameters": {
                    "id": 1184,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1183,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1195,
                        "src": "37849:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1182,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "37849:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37848:6:0"
                  },
                  "scope": 1574,
                  "src": "37763:172:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    36
                  ],
                  "body": {
                    "id": 1212,
                    "nodeType": "Block",
                    "src": "38091:51:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1206,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1094,
                              "src": "38108:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 1208,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1207,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1198,
                              "src": "38120:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "38108:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1210,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1209,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1200,
                            "src": "38127:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "38108:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1205,
                        "id": 1211,
                        "nodeType": "Return",
                        "src": "38101:34:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1196,
                    "nodeType": "StructuredDocumentation",
                    "src": "37941:47:0",
                    "text": " @dev See {IERC20-allowance}."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 1213,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1202,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "38064:8:0"
                  },
                  "parameters": {
                    "id": 1201,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1198,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1213,
                        "src": "38012:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1197,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38012:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1200,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1213,
                        "src": "38027:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1199,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38027:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38011:32:0"
                  },
                  "returnParameters": {
                    "id": 1205,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1204,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1213,
                        "src": "38082:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1203,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "38082:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38081:9:0"
                  },
                  "scope": 1574,
                  "src": "37993:149:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    46
                  ],
                  "body": {
                    "id": 1233,
                    "nodeType": "Block",
                    "src": "38369:77:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1225,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "38388:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 1226,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38388:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1227,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1216,
                              "src": "38402:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1228,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1218,
                              "src": "38411:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1224,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1551,
                            "src": "38379:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38379:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1230,
                        "nodeType": "ExpressionStatement",
                        "src": "38379:39:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "38435:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1223,
                        "id": 1232,
                        "nodeType": "Return",
                        "src": "38428:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1214,
                    "nodeType": "StructuredDocumentation",
                    "src": "38148:127:0",
                    "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 1234,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1220,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "38345:8:0"
                  },
                  "parameters": {
                    "id": 1219,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1216,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1234,
                        "src": "38297:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1215,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38297:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1218,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1234,
                        "src": "38314:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1217,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "38314:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38296:33:0"
                  },
                  "returnParameters": {
                    "id": 1223,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1222,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1234,
                        "src": "38363:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1221,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "38363:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38362:6:0"
                  },
                  "scope": 1574,
                  "src": "38280:166:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    58
                  ],
                  "body": {
                    "id": 1271,
                    "nodeType": "Block",
                    "src": "39025:205:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1248,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1237,
                              "src": "39045:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1249,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1239,
                              "src": "39053:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1250,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1241,
                              "src": "39064:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1247,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1395,
                            "src": "39035:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "39035:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1252,
                        "nodeType": "ExpressionStatement",
                        "src": "39035:36:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1254,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1237,
                              "src": "39090:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1255,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "39098:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 1256,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39098:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1264,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1241,
                                  "src": "39150:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365",
                                  "id": 1265,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "39158:42:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                    "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                  },
                                  "value": "ERC20: transfer amount exceeds allowance"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                    "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1257,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1094,
                                      "src": "39112:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 1259,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1258,
                                      "name": "sender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1237,
                                      "src": "39124:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "39112:19:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 1262,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 1260,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1064,
                                      "src": "39132:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                        "typeString": "function () view returns (address payable)"
                                      }
                                    },
                                    "id": 1261,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "39132:12:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "39112:33:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1263,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 756,
                                "src": "39112:37:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                }
                              },
                              "id": 1266,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39112:89:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1253,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1551,
                            "src": "39081:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "39081:121:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1268,
                        "nodeType": "ExpressionStatement",
                        "src": "39081:121:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "39219:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1246,
                        "id": 1270,
                        "nodeType": "Return",
                        "src": "39212:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1235,
                    "nodeType": "StructuredDocumentation",
                    "src": "38452:456:0",
                    "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n Requirements:\n - `sender` and `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``sender``'s tokens of at least\n `amount`."
                  },
                  "functionSelector": "23b872dd",
                  "id": 1272,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1243,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "39001:8:0"
                  },
                  "parameters": {
                    "id": 1242,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1237,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1272,
                        "src": "38935:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1236,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38935:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1239,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1272,
                        "src": "38951:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1238,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38951:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1241,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1272,
                        "src": "38970:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1240,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "38970:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38934:51:0"
                  },
                  "returnParameters": {
                    "id": 1246,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1245,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1272,
                        "src": "39019:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1244,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "39019:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39018:6:0"
                  },
                  "scope": 1574,
                  "src": "38913:317:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1299,
                    "nodeType": "Block",
                    "src": "39719:121:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1283,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "39738:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 1284,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39738:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1285,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1275,
                              "src": "39752:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1293,
                                  "name": "addedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1277,
                                  "src": "39800:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1286,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1094,
                                      "src": "39761:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 1289,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 1287,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1064,
                                        "src": "39773:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                          "typeString": "function () view returns (address payable)"
                                        }
                                      },
                                      "id": 1288,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "39773:12:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "39761:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 1291,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1290,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1275,
                                    "src": "39787:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "39761:34:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1292,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 711,
                                "src": "39761:38:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 1294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39761:50:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1282,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1551,
                            "src": "39729:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "39729:83:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1296,
                        "nodeType": "ExpressionStatement",
                        "src": "39729:83:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "39829:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1281,
                        "id": 1298,
                        "nodeType": "Return",
                        "src": "39822:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1273,
                    "nodeType": "StructuredDocumentation",
                    "src": "39236:384:0",
                    "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "39509351",
                  "id": 1300,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1278,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1275,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1300,
                        "src": "39652:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1274,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "39652:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1277,
                        "mutability": "mutable",
                        "name": "addedValue",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1300,
                        "src": "39669:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1276,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "39669:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39651:37:0"
                  },
                  "returnParameters": {
                    "id": 1281,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1280,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1300,
                        "src": "39713:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1279,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "39713:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39712:6:0"
                  },
                  "scope": 1574,
                  "src": "39625:215:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1328,
                    "nodeType": "Block",
                    "src": "40426:167:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1311,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "40445:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 1312,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "40445:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1313,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1303,
                              "src": "40459:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1321,
                                  "name": "subtractedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1305,
                                  "src": "40507:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                  "id": 1322,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "40524:39:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                    "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                  },
                                  "value": "ERC20: decreased allowance below zero"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                    "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1314,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1094,
                                      "src": "40468:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 1317,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 1315,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1064,
                                        "src": "40480:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                          "typeString": "function () view returns (address payable)"
                                        }
                                      },
                                      "id": 1316,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "40480:12:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "40468:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 1319,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1318,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1303,
                                    "src": "40494:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "40468:34:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1320,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 756,
                                "src": "40468:38:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                }
                              },
                              "id": 1323,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "40468:96:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1310,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1551,
                            "src": "40436:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40436:129:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1325,
                        "nodeType": "ExpressionStatement",
                        "src": "40436:129:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "40582:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1309,
                        "id": 1327,
                        "nodeType": "Return",
                        "src": "40575:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1301,
                    "nodeType": "StructuredDocumentation",
                    "src": "39846:476:0",
                    "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."
                  },
                  "functionSelector": "a457c2d7",
                  "id": 1329,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1306,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1303,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1329,
                        "src": "40354:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1302,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "40354:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1305,
                        "mutability": "mutable",
                        "name": "subtractedValue",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1329,
                        "src": "40371:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1304,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "40371:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "40353:42:0"
                  },
                  "returnParameters": {
                    "id": 1309,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1308,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1329,
                        "src": "40420:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1307,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "40420:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "40419:6:0"
                  },
                  "scope": 1574,
                  "src": "40327:266:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1394,
                    "nodeType": "Block",
                    "src": "41154:443:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1345,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1340,
                                "name": "sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1332,
                                "src": "41172:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1343,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "41190:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1342,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "41182:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1341,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "41182:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1344,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "41182:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "41172:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                              "id": 1346,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "41194:39:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              },
                              "value": "ERC20: transfer from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              }
                            ],
                            "id": 1339,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "41164:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41164:70:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1348,
                        "nodeType": "ExpressionStatement",
                        "src": "41164:70:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1355,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1350,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1334,
                                "src": "41252:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1353,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "41273:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1352,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "41265:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1351,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "41265:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1354,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "41265:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "41252:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                              "id": 1356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "41277:37:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              },
                              "value": "ERC20: transfer to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              }
                            ],
                            "id": 1349,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "41244:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41244:71:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1358,
                        "nodeType": "ExpressionStatement",
                        "src": "41244:71:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1360,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1332,
                              "src": "41347:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1361,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1334,
                              "src": "41355:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1362,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1336,
                              "src": "41366:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1359,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1573,
                            "src": "41326:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41326:47:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1364,
                        "nodeType": "ExpressionStatement",
                        "src": "41326:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1365,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1088,
                              "src": "41384:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1367,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1366,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1332,
                              "src": "41394:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "41384:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1372,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1336,
                                "src": "41426:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                                "id": 1373,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "41434:40:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                  "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                },
                                "value": "ERC20: transfer amount exceeds balance"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                  "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1368,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1088,
                                  "src": "41404:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1370,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1369,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1332,
                                  "src": "41414:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "41404:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1371,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 756,
                              "src": "41404:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                              }
                            },
                            "id": 1374,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "41404:71:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "41384:91:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1376,
                        "nodeType": "ExpressionStatement",
                        "src": "41384:91:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1377,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1088,
                              "src": "41485:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1379,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1378,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1334,
                              "src": "41495:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "41485:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1384,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1336,
                                "src": "41533:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1380,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1088,
                                  "src": "41508:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1382,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1381,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1334,
                                  "src": "41518:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "41508:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1383,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "41508:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "41508:32:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "41485:55:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1387,
                        "nodeType": "ExpressionStatement",
                        "src": "41485:55:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1389,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1332,
                              "src": "41564:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1390,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1334,
                              "src": "41572:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1391,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1336,
                              "src": "41583:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1388,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "41555:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41555:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1393,
                        "nodeType": "EmitStatement",
                        "src": "41550:40:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1330,
                    "nodeType": "StructuredDocumentation",
                    "src": "40599:463:0",
                    "text": " @dev Moves tokens `amount` from `sender` to `recipient`.\n This is internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `sender` cannot be the zero address.\n - `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`."
                  },
                  "id": 1395,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1337,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1332,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1395,
                        "src": "41086:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1331,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "41086:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1334,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1395,
                        "src": "41102:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1333,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "41102:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1336,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1395,
                        "src": "41121:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1335,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "41121:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "41085:51:0"
                  },
                  "returnParameters": {
                    "id": 1338,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "41154:0:0"
                  },
                  "scope": 1574,
                  "src": "41067:530:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1449,
                    "nodeType": "Block",
                    "src": "41933:305:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1409,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1404,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1398,
                                "src": "41951:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1407,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "41970:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1406,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "41962:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1405,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "41962:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1408,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "41962:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "41951:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                              "id": 1410,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "41974:33:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              },
                              "value": "ERC20: mint to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              }
                            ],
                            "id": 1403,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "41943:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41943:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1412,
                        "nodeType": "ExpressionStatement",
                        "src": "41943:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1416,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "42048:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1415,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42040:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1414,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "42040:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1417,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42040:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1418,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1398,
                              "src": "42052:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1419,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1400,
                              "src": "42061:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1413,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1573,
                            "src": "42019:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42019:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1421,
                        "nodeType": "ExpressionStatement",
                        "src": "42019:49:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1427,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1422,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1096,
                            "src": "42079:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1425,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1400,
                                "src": "42111:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1423,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1096,
                                "src": "42094:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1424,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "42094:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1426,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "42094:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "42079:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1428,
                        "nodeType": "ExpressionStatement",
                        "src": "42079:39:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1429,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1088,
                              "src": "42128:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1431,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1430,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1398,
                              "src": "42138:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "42128:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1436,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1400,
                                "src": "42172:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1432,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1088,
                                  "src": "42149:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1434,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1433,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1398,
                                  "src": "42159:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "42149:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1435,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "42149:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1437,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "42149:30:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "42128:51:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1439,
                        "nodeType": "ExpressionStatement",
                        "src": "42128:51:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "42211:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1442,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42203:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1441,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "42203:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1444,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42203:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1445,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1398,
                              "src": "42215:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1446,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1400,
                              "src": "42224:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1440,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "42194:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1447,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42194:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1448,
                        "nodeType": "EmitStatement",
                        "src": "42189:42:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1396,
                    "nodeType": "StructuredDocumentation",
                    "src": "41603:260:0",
                    "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `to` cannot be the zero address."
                  },
                  "id": 1450,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1401,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1398,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1450,
                        "src": "41883:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1397,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "41883:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1400,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1450,
                        "src": "41900:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1399,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "41900:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "41882:33:0"
                  },
                  "returnParameters": {
                    "id": 1402,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "41933:0:0"
                  },
                  "scope": 1574,
                  "src": "41868:370:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1505,
                    "nodeType": "Block",
                    "src": "42623:345:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1464,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1459,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1453,
                                "src": "42641:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1462,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "42660:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1461,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "42652:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1460,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "42652:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1463,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "42652:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "42641:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                              "id": 1465,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "42664:35:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              },
                              "value": "ERC20: burn from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              }
                            ],
                            "id": 1458,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "42633:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42633:67:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1467,
                        "nodeType": "ExpressionStatement",
                        "src": "42633:67:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1469,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1453,
                              "src": "42732:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1472,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "42749:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1471,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42741:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1470,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "42741:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42741:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1474,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1455,
                              "src": "42753:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1468,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1573,
                            "src": "42711:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42711:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1476,
                        "nodeType": "ExpressionStatement",
                        "src": "42711:49:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1477,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1088,
                              "src": "42771:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1479,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1478,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1453,
                              "src": "42781:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "42771:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1484,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1455,
                                "src": "42815:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                                "id": 1485,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "42823:36:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                  "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                },
                                "value": "ERC20: burn amount exceeds balance"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                  "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1480,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1088,
                                  "src": "42792:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1482,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1481,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1453,
                                  "src": "42802:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "42792:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1483,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 756,
                              "src": "42792:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                              }
                            },
                            "id": 1486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "42792:68:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "42771:89:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1488,
                        "nodeType": "ExpressionStatement",
                        "src": "42771:89:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1489,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1096,
                            "src": "42870:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1492,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1455,
                                "src": "42902:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1490,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1096,
                                "src": "42885:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1491,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "42885:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1493,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "42885:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "42870:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1495,
                        "nodeType": "ExpressionStatement",
                        "src": "42870:39:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1497,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1453,
                              "src": "42933:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1500,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "42950:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42942:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1498,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "42942:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1501,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42942:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1502,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1455,
                              "src": "42954:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1496,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "42924:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42924:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1504,
                        "nodeType": "EmitStatement",
                        "src": "42919:42:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1451,
                    "nodeType": "StructuredDocumentation",
                    "src": "42244:309:0",
                    "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."
                  },
                  "id": 1506,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1456,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1453,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1506,
                        "src": "42573:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1452,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "42573:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1455,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1506,
                        "src": "42590:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1454,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "42590:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "42572:33:0"
                  },
                  "returnParameters": {
                    "id": 1457,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "42623:0:0"
                  },
                  "scope": 1574,
                  "src": "42558:410:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1550,
                    "nodeType": "Block",
                    "src": "43474:257:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1522,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1517,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1509,
                                "src": "43492:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1520,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "43509:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1519,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "43501:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1518,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "43501:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1521,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "43501:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "43492:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                              "id": 1523,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "43513:38:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              },
                              "value": "ERC20: approve from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              }
                            ],
                            "id": 1516,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "43484:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43484:68:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1525,
                        "nodeType": "ExpressionStatement",
                        "src": "43484:68:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1527,
                                "name": "spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1511,
                                "src": "43570:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1530,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "43589:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1529,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "43581:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1528,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "43581:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1531,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "43581:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "43570:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                              "id": 1533,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "43593:36:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              },
                              "value": "ERC20: approve to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              }
                            ],
                            "id": 1526,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "43562:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43562:68:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1535,
                        "nodeType": "ExpressionStatement",
                        "src": "43562:68:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1536,
                                "name": "_allowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1094,
                                "src": "43641:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1539,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1537,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1509,
                                "src": "43653:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "43641:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1540,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1538,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1511,
                              "src": "43660:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "43641:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1541,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1513,
                            "src": "43671:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "43641:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1543,
                        "nodeType": "ExpressionStatement",
                        "src": "43641:36:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1545,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1509,
                              "src": "43701:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1546,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1511,
                              "src": "43708:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1547,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1513,
                              "src": "43717:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1544,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 76,
                            "src": "43692:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43692:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1549,
                        "nodeType": "EmitStatement",
                        "src": "43687:37:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1507,
                    "nodeType": "StructuredDocumentation",
                    "src": "42974:412:0",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."
                  },
                  "id": 1551,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1509,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1551,
                        "src": "43409:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1508,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "43409:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1511,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1551,
                        "src": "43424:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1510,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "43424:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1513,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1551,
                        "src": "43441:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1512,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "43441:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "43408:48:0"
                  },
                  "returnParameters": {
                    "id": 1515,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "43474:0:0"
                  },
                  "scope": 1574,
                  "src": "43391:340:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1561,
                    "nodeType": "Block",
                    "src": "44104:38:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1557,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1102,
                            "src": "44114:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1558,
                            "name": "decimals_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1554,
                            "src": "44126:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "44114:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 1560,
                        "nodeType": "ExpressionStatement",
                        "src": "44114:21:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1552,
                    "nodeType": "StructuredDocumentation",
                    "src": "43737:312:0",
                    "text": " @dev Sets {decimals} to a value other than the default one of 18.\n WARNING: This function should only be called from the constructor. Most\n applications that interact with token contracts will not expect\n {decimals} to ever change, and may work incorrectly if it does."
                  },
                  "id": 1562,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setupDecimals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1555,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1554,
                        "mutability": "mutable",
                        "name": "decimals_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1562,
                        "src": "44078:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 1553,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "44078:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "44077:17:0"
                  },
                  "returnParameters": {
                    "id": 1556,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "44104:0:0"
                  },
                  "scope": 1574,
                  "src": "44054:88:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1572,
                    "nodeType": "Block",
                    "src": "44818:3:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 1563,
                    "nodeType": "StructuredDocumentation",
                    "src": "44148:576:0",
                    "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be to transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                  },
                  "id": 1573,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_beforeTokenTransfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1570,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1565,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1573,
                        "src": "44759:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1564,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "44759:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1567,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1573,
                        "src": "44773:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1566,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "44773:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1569,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1573,
                        "src": "44785:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1568,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "44785:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "44758:42:0"
                  },
                  "returnParameters": {
                    "id": 1571,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "44818:0:0"
                  },
                  "scope": 1574,
                  "src": "44729:92:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 7393,
              "src": "35397:9426:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1576,
                    "name": "IBasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 141,
                    "src": "45602:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBasicFDT_$141",
                      "typeString": "contract IBasicFDT"
                    }
                  },
                  "id": 1577,
                  "nodeType": "InheritanceSpecifier",
                  "src": "45602:9:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1578,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1574,
                    "src": "45613:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1574",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 1579,
                  "nodeType": "InheritanceSpecifier",
                  "src": "45613:5:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1076,
                1574
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 1575,
                "nodeType": "StructuredDocumentation",
                "src": "45478:94:0",
                "text": "@title BasicFDT implements the basic level FDT functionality for accounting for revenues."
              },
              "fullyImplemented": true,
              "id": 1946,
              "linearizedBaseContracts": [
                1946,
                1574,
                141,
                77,
                1076
              ],
              "name": "BasicFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 1582,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1580,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "45632:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "45626:33:0",
                  "typeName": {
                    "id": 1581,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45651:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 1585,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1583,
                    "name": "SafeMathUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 684,
                    "src": "45670:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathUint_$684",
                      "typeString": "library SafeMathUint"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "45664:33:0",
                  "typeName": {
                    "id": 1584,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45689:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 1588,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1586,
                    "name": "SignedSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1055,
                    "src": "45708:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignedSafeMath_$1055",
                      "typeString": "library SignedSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "45702:33:0",
                  "typeName": {
                    "id": 1587,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45728:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "id": 1591,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1589,
                    "name": "SafeMathInt",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 661,
                    "src": "45746:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathInt_$661",
                      "typeString": "library SafeMathInt"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "45740:33:0",
                  "typeName": {
                    "id": 1590,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45766:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "constant": true,
                  "id": 1596,
                  "mutability": "constant",
                  "name": "pointsMultiplier",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1946,
                  "src": "45779:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1592,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45779:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                    },
                    "id": 1595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 1593,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "45824:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "313238",
                      "id": 1594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "45829:3:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "128"
                    },
                    "src": "45824:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1598,
                  "mutability": "mutable",
                  "name": "pointsPerShare",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1946,
                  "src": "45838:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1597,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45838:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1602,
                  "mutability": "mutable",
                  "name": "pointsCorrection",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1946,
                  "src": "45876:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                    "typeString": "mapping(address => int256)"
                  },
                  "typeName": {
                    "id": 1601,
                    "keyType": {
                      "id": 1599,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "45884:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "45876:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                      "typeString": "mapping(address => int256)"
                    },
                    "valueType": {
                      "id": 1600,
                      "name": "int256",
                      "nodeType": "ElementaryTypeName",
                      "src": "45895:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1606,
                  "mutability": "mutable",
                  "name": "withdrawnFunds",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1946,
                  "src": "45935:51:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 1605,
                    "keyType": {
                      "id": 1603,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "45943:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "45935:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 1604,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "45954:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1617,
                    "nodeType": "Block",
                    "src": "46074:3:0",
                    "statements": []
                  },
                  "documentation": null,
                  "id": 1618,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1613,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1608,
                          "src": "46053:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1614,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1610,
                          "src": "46059:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 1615,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 1612,
                        "name": "ERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1574,
                        "src": "46047:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20_$1574_$",
                          "typeString": "type(contract ERC20)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "46047:19:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1611,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1608,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1618,
                        "src": "46005:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1607,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "46005:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1610,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1618,
                        "src": "46025:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1609,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "46025:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "46004:42:0"
                  },
                  "returnParameters": {
                    "id": 1616,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "46074:0:0"
                  },
                  "scope": 1946,
                  "src": "45993:84:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1660,
                    "nodeType": "Block",
                    "src": "47009:288:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1625,
                                  "name": "totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1160,
                                  "src": "47027:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 1626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "47027:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "47043:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "47027:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4644543a5a45524f5f535550504c59",
                              "id": 1629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "47046:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a3114e332720ee805fc81c31b02342a611c667fffb8818a1e551e83759812e71",
                                "typeString": "literal_string \"FDT:ZERO_SUPPLY\""
                              },
                              "value": "FDT:ZERO_SUPPLY"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a3114e332720ee805fc81c31b02342a611c667fffb8818a1e551e83759812e71",
                                "typeString": "literal_string \"FDT:ZERO_SUPPLY\""
                              }
                            ],
                            "id": 1624,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "47019:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47019:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1631,
                        "nodeType": "ExpressionStatement",
                        "src": "47019:45:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1632,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1621,
                            "src": "47079:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1633,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "47088:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "47079:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1636,
                        "nodeType": "IfStatement",
                        "src": "47075:23:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 1623,
                          "id": 1635,
                          "nodeType": "Return",
                          "src": "47091:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1637,
                            "name": "pointsPerShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1598,
                            "src": "47108:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1646,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1642,
                                      "name": "pointsMultiplier",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1596,
                                      "src": "47154:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1640,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1621,
                                      "src": "47144:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1641,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 791,
                                    "src": "47144:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1643,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "47144:27:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 1644,
                                    "name": "totalSupply",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1160,
                                    "src": "47174:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view returns (uint256)"
                                    }
                                  },
                                  "id": 1645,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "47174:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "47144:43:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1638,
                                "name": "pointsPerShare",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1598,
                                "src": "47125:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1639,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "47125:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "47125:63:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "47108:80:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1649,
                        "nodeType": "ExpressionStatement",
                        "src": "47108:80:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1651,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "47220:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1652,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47220:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1653,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1621,
                              "src": "47232:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1650,
                            "name": "FundsDistributed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 87,
                            "src": "47203:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47203:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1655,
                        "nodeType": "EmitStatement",
                        "src": "47198:40:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1657,
                              "name": "pointsPerShare",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1598,
                              "src": "47275:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1656,
                            "name": "PointsPerShareUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 101,
                            "src": "47253:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47253:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1659,
                        "nodeType": "EmitStatement",
                        "src": "47248:42:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1619,
                    "nodeType": "StructuredDocumentation",
                    "src": "46083:871:0",
                    "text": "@dev Distributes funds to token holders.\n@dev It reverts if the total supply of tokens is 0.\n@dev It emits a `FundsDistributed` event if the amount of received funds is greater than 0.\n@dev It emits a `PointsPerShareUpdated` event if the amount of received funds is greater than 0.\nAbout undistributed funds:\nIn each distribution, there is a small amount of funds which do not get distributed,\nwhich is `(value  pointsMultiplier) % totalSupply()`.\nWith a well-chosen `pointsMultiplier`, the amount funds that are not getting distributed\nin a distribution can be less than 1 (base unit).\nWe can actually keep track of the undistributed funds in a distribution\nand try to distribute it in the next distribution."
                  },
                  "id": 1661,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_distributeFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1622,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1621,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1661,
                        "src": "46985:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1620,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "46985:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "46984:15:0"
                  },
                  "returnParameters": {
                    "id": 1623,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "47009:0:0"
                  },
                  "scope": 1946,
                  "src": "46959:338:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1698,
                    "nodeType": "Block",
                    "src": "47636:303:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1667,
                            "name": "withdrawableDividend",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1665,
                            "src": "47646:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1669,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "47695:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1670,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "47695:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "id": 1668,
                              "name": "withdrawableFundsOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1717,
                              "src": "47675:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 1671,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "47675:31:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "47646:60:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1673,
                        "nodeType": "ExpressionStatement",
                        "src": "47646:60:0"
                      },
                      {
                        "assignments": [
                          1675
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1675,
                            "mutability": "mutable",
                            "name": "_withdrawnFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1698,
                            "src": "47716:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1674,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "47716:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1683,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1681,
                              "name": "withdrawableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1665,
                              "src": "47776:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1676,
                                "name": "withdrawnFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1606,
                                "src": "47745:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1679,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1677,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "47760:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1678,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "47760:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "47745:26:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1680,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "47745:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47745:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "47716:81:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1684,
                              "name": "withdrawnFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1606,
                              "src": "47807:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1687,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1685,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "47822:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1686,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47822:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "47807:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1688,
                            "name": "_withdrawnFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1675,
                            "src": "47836:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "47807:44:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1690,
                        "nodeType": "ExpressionStatement",
                        "src": "47807:44:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1692,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "47882:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1693,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47882:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1694,
                              "name": "withdrawableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1665,
                              "src": "47894:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1695,
                              "name": "_withdrawnFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1675,
                              "src": "47916:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1691,
                            "name": "FundsWithdrawn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 96,
                            "src": "47867:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 1696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47867:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1697,
                        "nodeType": "EmitStatement",
                        "src": "47862:70:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1662,
                    "nodeType": "StructuredDocumentation",
                    "src": "47303:252:0",
                    "text": "@dev    Prepares the withdrawal of funds.\n@dev    It emits a `FundsWithdrawn` event if the amount of withdrawn funds is greater than 0.\n@return withdrawableDividend The amount of dividend funds that can be withdrawn."
                  },
                  "id": 1699,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_prepareWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1663,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "47585:2:0"
                  },
                  "returnParameters": {
                    "id": 1666,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1665,
                        "mutability": "mutable",
                        "name": "withdrawableDividend",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1699,
                        "src": "47606:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1664,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "47606:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "47605:30:0"
                  },
                  "scope": 1946,
                  "src": "47560:379:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    116
                  ],
                  "body": {
                    "id": 1716,
                    "nodeType": "Block",
                    "src": "48029:79:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1711,
                                "name": "withdrawnFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1606,
                                "src": "48078:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1713,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1712,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1701,
                                "src": "48093:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "48078:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1708,
                                  "name": "_owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1701,
                                  "src": "48066:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1707,
                                "name": "accumulativeFundsOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1757,
                                "src": "48046:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 1709,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "48046:27:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1710,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 728,
                            "src": "48046:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "48046:55:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1706,
                        "id": 1715,
                        "nodeType": "Return",
                        "src": "48039:62:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "443bb293",
                  "id": 1717,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawableFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1703,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "48002:8:0"
                  },
                  "parameters": {
                    "id": 1702,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1701,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1717,
                        "src": "47974:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1700,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "47974:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "47973:16:0"
                  },
                  "returnParameters": {
                    "id": 1706,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1705,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1717,
                        "src": "48020:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1704,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48020:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48019:9:0"
                  },
                  "scope": 1946,
                  "src": "47945:163:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    128
                  ],
                  "body": {
                    "id": 1729,
                    "nodeType": "Block",
                    "src": "48197:46:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1725,
                            "name": "withdrawnFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1606,
                            "src": "48214:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1727,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1726,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1719,
                            "src": "48229:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "48214:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1724,
                        "id": 1728,
                        "nodeType": "Return",
                        "src": "48207:29:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "0041c52c",
                  "id": 1730,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawnFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1721,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "48165:8:0"
                  },
                  "parameters": {
                    "id": 1720,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1719,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1730,
                        "src": "48140:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1718,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "48140:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48139:16:0"
                  },
                  "returnParameters": {
                    "id": 1724,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1723,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1730,
                        "src": "48188:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1722,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48188:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48187:9:0"
                  },
                  "scope": 1946,
                  "src": "48114:129:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    136
                  ],
                  "body": {
                    "id": 1756,
                    "nodeType": "Block",
                    "src": "48333:221:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1747,
                                      "name": "pointsCorrection",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1602,
                                      "src": "48470:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                        "typeString": "mapping(address => int256)"
                                      }
                                    },
                                    "id": 1749,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1748,
                                      "name": "_owner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1732,
                                      "src": "48487:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "48470:24:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 1741,
                                                "name": "_owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1732,
                                                "src": "48408:6:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "id": 1740,
                                              "name": "balanceOf",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1174,
                                              "src": "48398:9:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view returns (uint256)"
                                              }
                                            },
                                            "id": 1742,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "48398:17:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1738,
                                            "name": "pointsPerShare",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1598,
                                            "src": "48362:14:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 1739,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 791,
                                          "src": "48362:35:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 1743,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "48362:54:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1744,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toInt256Safe",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 683,
                                      "src": "48362:84:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (int256)"
                                      }
                                    },
                                    "id": 1745,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "48362:86:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "id": 1746,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1054,
                                  "src": "48362:107:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                                    "typeString": "function (int256,int256) pure returns (int256)"
                                  }
                                },
                                "id": 1750,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "48362:133:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 1751,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint256Safe",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 660,
                              "src": "48362:164:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                "typeString": "function (int256) pure returns (uint256)"
                              }
                            },
                            "id": 1752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "48362:166:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1753,
                            "name": "pointsMultiplier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1596,
                            "src": "48531:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "48362:185:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1737,
                        "id": 1755,
                        "nodeType": "Return",
                        "src": "48343:204:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "4e97415f",
                  "id": 1757,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1734,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "48301:8:0"
                  },
                  "parameters": {
                    "id": 1733,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1732,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1757,
                        "src": "48278:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1731,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "48278:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48277:16:0"
                  },
                  "returnParameters": {
                    "id": 1737,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1736,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1757,
                        "src": "48324:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1735,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48324:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48323:9:0"
                  },
                  "scope": 1946,
                  "src": "48249:305:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1395
                  ],
                  "body": {
                    "id": 1825,
                    "nodeType": "Block",
                    "src": "49061:541:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1771,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1760,
                              "src": "49087:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1772,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1762,
                              "src": "49093:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1773,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1764,
                              "src": "49097:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1768,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "49071:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_BasicFDT_$1946",
                                "typeString": "contract super BasicFDT"
                              }
                            },
                            "id": 1770,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1395,
                            "src": "49071:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49071:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1775,
                        "nodeType": "ExpressionStatement",
                        "src": "49071:32:0"
                      },
                      {
                        "assignments": [
                          1777
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1777,
                            "mutability": "mutable",
                            "name": "_magCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1825,
                            "src": "49114:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1776,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "49114:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1784,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1780,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1764,
                                  "src": "49163:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1778,
                                  "name": "pointsPerShare",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1598,
                                  "src": "49144:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1779,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "49144:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 1781,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "49144:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toInt256Safe",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 683,
                            "src": "49144:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (int256)"
                            }
                          },
                          "id": 1783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49144:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "49114:70:0"
                      },
                      {
                        "assignments": [
                          1786
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1786,
                            "mutability": "mutable",
                            "name": "pointsCorrectionFrom",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1825,
                            "src": "49194:27:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1785,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "49194:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1793,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1791,
                              "name": "_magCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1777,
                              "src": "49251:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1787,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1602,
                                "src": "49224:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1789,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1788,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1760,
                                "src": "49241:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "49224:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1054,
                            "src": "49224:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 1792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49224:42:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "49194:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1794,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1602,
                              "src": "49276:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1796,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1795,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1760,
                              "src": "49293:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "49276:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1797,
                            "name": "pointsCorrectionFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1786,
                            "src": "49306:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "49276:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1799,
                        "nodeType": "ExpressionStatement",
                        "src": "49276:50:0"
                      },
                      {
                        "assignments": [
                          1801
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1801,
                            "mutability": "mutable",
                            "name": "pointsCorrectionTo",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1825,
                            "src": "49336:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1800,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "49336:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1808,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1806,
                              "name": "_magCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1777,
                              "src": "49391:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1802,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1602,
                                "src": "49366:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1804,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1803,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1762,
                                "src": "49383:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "49366:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1805,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "49366:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 1807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49366:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "49336:70:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1813,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1809,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1602,
                              "src": "49416:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1811,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1810,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1762,
                              "src": "49433:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "49416:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1812,
                            "name": "pointsCorrectionTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1801,
                            "src": "49446:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "49416:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1814,
                        "nodeType": "ExpressionStatement",
                        "src": "49416:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1816,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1760,
                              "src": "49504:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1817,
                              "name": "pointsCorrectionFrom",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1786,
                              "src": "49510:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1815,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "49480:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1818,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49480:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1819,
                        "nodeType": "EmitStatement",
                        "src": "49475:56:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1821,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1762,
                              "src": "49570:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1822,
                              "name": "pointsCorrectionTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1801,
                              "src": "49576:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1820,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "49546:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49546:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1824,
                        "nodeType": "EmitStatement",
                        "src": "49541:54:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1758,
                    "nodeType": "StructuredDocumentation",
                    "src": "48560:380:0",
                    "text": "@dev   Transfers tokens from one account to another. Updates pointsCorrection to keep funds unchanged.\n@dev   It emits two `PointsCorrectionUpdated` events, one for the sender and one for the receiver.\n@param from  The address to transfer from.\n@param to    The address to transfer to.\n@param value The amount to be transferred."
                  },
                  "id": 1826,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1766,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "49052:8:0"
                  },
                  "parameters": {
                    "id": 1765,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1760,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1826,
                        "src": "48973:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1759,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "48973:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1762,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1826,
                        "src": "48995:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1761,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "48995:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1764,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1826,
                        "src": "49015:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1763,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "49015:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48963:71:0"
                  },
                  "returnParameters": {
                    "id": 1767,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "49061:0:0"
                  },
                  "scope": 1946,
                  "src": "48945:657:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1450
                  ],
                  "body": {
                    "id": 1868,
                    "nodeType": "Block",
                    "src": "49919:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1838,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1829,
                              "src": "49941:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1839,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1831,
                              "src": "49950:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1835,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "49929:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_BasicFDT_$1946",
                                "typeString": "contract super BasicFDT"
                              }
                            },
                            "id": 1837,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_mint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1450,
                            "src": "49929:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49929:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1841,
                        "nodeType": "ExpressionStatement",
                        "src": "49929:27:0"
                      },
                      {
                        "assignments": [
                          1843
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1843,
                            "mutability": "mutable",
                            "name": "_pointsCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1868,
                            "src": "49967:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1842,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "49967:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1856,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1850,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1831,
                                          "src": "50057:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1848,
                                          "name": "pointsPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1598,
                                          "src": "50038:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1849,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 791,
                                        "src": "50038:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1851,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "50038:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1852,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "50037:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 683,
                                "src": "50037:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 1854,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "50037:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1844,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1602,
                                "src": "49994:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1846,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1845,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1829,
                                "src": "50011:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "49994:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1847,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "49994:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 1855,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49994:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "49967:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1857,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1602,
                              "src": "50100:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1859,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1858,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1829,
                              "src": "50117:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "50100:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1860,
                            "name": "_pointsCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1843,
                            "src": "50128:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "50100:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1862,
                        "nodeType": "ExpressionStatement",
                        "src": "50100:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1864,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1829,
                              "src": "50185:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1865,
                              "name": "_pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1843,
                              "src": "50194:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1863,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "50161:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1866,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "50161:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1867,
                        "nodeType": "EmitStatement",
                        "src": "50156:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1827,
                    "nodeType": "StructuredDocumentation",
                    "src": "49608:233:0",
                    "text": "@dev   Mints tokens to an account. Updates pointsCorrection to keep funds unchanged.\n@param account The account that will receive the created tokens.\n@param value   The amount that will be created."
                  },
                  "id": 1869,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1833,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "49910:8:0"
                  },
                  "parameters": {
                    "id": 1832,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1829,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1869,
                        "src": "49861:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1828,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "49861:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1831,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1869,
                        "src": "49878:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1830,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "49878:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "49860:32:0"
                  },
                  "returnParameters": {
                    "id": 1834,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "49919:0:0"
                  },
                  "scope": 1946,
                  "src": "49846:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1506
                  ],
                  "body": {
                    "id": 1911,
                    "nodeType": "Block",
                    "src": "50604:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1881,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1872,
                              "src": "50626:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1882,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1874,
                              "src": "50635:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1878,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "50614:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_BasicFDT_$1946",
                                "typeString": "contract super BasicFDT"
                              }
                            },
                            "id": 1880,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_burn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1506,
                            "src": "50614:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "50614:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1884,
                        "nodeType": "ExpressionStatement",
                        "src": "50614:27:0"
                      },
                      {
                        "assignments": [
                          1886
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1886,
                            "mutability": "mutable",
                            "name": "_pointsCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1911,
                            "src": "50652:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1885,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "50652:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1899,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1893,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1874,
                                          "src": "50742:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1891,
                                          "name": "pointsPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1598,
                                          "src": "50723:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1892,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 791,
                                        "src": "50723:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1894,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "50723:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1895,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "50722:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1896,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 683,
                                "src": "50722:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 1897,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "50722:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1887,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1602,
                                "src": "50679:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1889,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1888,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1872,
                                "src": "50696:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "50679:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1890,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1054,
                            "src": "50679:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 1898,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "50679:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "50652:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1900,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1602,
                              "src": "50785:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1902,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1901,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1872,
                              "src": "50802:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "50785:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1903,
                            "name": "_pointsCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1886,
                            "src": "50813:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "50785:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1905,
                        "nodeType": "ExpressionStatement",
                        "src": "50785:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1907,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1872,
                              "src": "50870:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1908,
                              "name": "_pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1886,
                              "src": "50879:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1906,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "50846:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "50846:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1910,
                        "nodeType": "EmitStatement",
                        "src": "50841:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1870,
                    "nodeType": "StructuredDocumentation",
                    "src": "50225:301:0",
                    "text": "@dev   Burns an amount of the token of a given account. Updates pointsCorrection to keep funds unchanged.\n@dev   It emits a `PointsCorrectionUpdated` event.\n@param account The account whose tokens will be burnt.\n@param value   The amount that will be burnt."
                  },
                  "id": 1912,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1876,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "50595:8:0"
                  },
                  "parameters": {
                    "id": 1875,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1872,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1912,
                        "src": "50546:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1871,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "50546:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1874,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1912,
                        "src": "50563:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1873,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "50563:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "50545:32:0"
                  },
                  "returnParameters": {
                    "id": 1877,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "50604:0:0"
                  },
                  "scope": 1946,
                  "src": "50531:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": {
                    "id": 1916,
                    "nodeType": "Block",
                    "src": "50959:2:0",
                    "statements": []
                  },
                  "documentation": null,
                  "functionSelector": "24600fc3",
                  "id": 1917,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1914,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "50950:8:0"
                  },
                  "parameters": {
                    "id": 1913,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "50932:2:0"
                  },
                  "returnParameters": {
                    "id": 1915,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "50959:0:0"
                  },
                  "scope": 1946,
                  "src": "50910:51:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1923,
                    "nodeType": "Block",
                    "src": "51282:2:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 1918,
                    "nodeType": "StructuredDocumentation",
                    "src": "50967:240:0",
                    "text": "@dev    Updates the current `fundsToken` balance and returns the difference of the new and previous `fundsToken` balance.\n@return A int256 representing the difference of the new and previous `fundsToken` balance."
                  },
                  "id": 1924,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateFundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1919,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "51245:2:0"
                  },
                  "returnParameters": {
                    "id": 1922,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1921,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1924,
                        "src": "51274:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1920,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "51274:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51273:8:0"
                  },
                  "scope": 1946,
                  "src": "51212:72:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    140
                  ],
                  "body": {
                    "id": 1944,
                    "nodeType": "Block",
                    "src": "51345:150:0",
                    "statements": [
                      {
                        "assignments": [
                          1929
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1929,
                            "mutability": "mutable",
                            "name": "newFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1944,
                            "src": "51355:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1928,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "51355:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1932,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1930,
                            "name": "_updateFundsTokenBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1924,
                            "src": "51373:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 1931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "51373:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "51355:44:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 1935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1933,
                            "name": "newFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1929,
                            "src": "51414:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "51426:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "51414:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1937,
                        "nodeType": "IfStatement",
                        "src": "51410:26:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 1927,
                          "id": 1936,
                          "nodeType": "Return",
                          "src": "51429:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1939,
                                  "name": "newFunds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1929,
                                  "src": "51463:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 1940,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toUint256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 660,
                                "src": "51463:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                  "typeString": "function (int256) pure returns (uint256)"
                                }
                              },
                              "id": 1941,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "51463:24:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1938,
                            "name": "_distributeFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1661,
                            "src": "51446:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "51446:42:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1943,
                        "nodeType": "ExpressionStatement",
                        "src": "51446:42:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "46c162de",
                  "id": 1945,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateFundsReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1926,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "51328:8:0"
                  },
                  "parameters": {
                    "id": 1925,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "51318:2:0"
                  },
                  "returnParameters": {
                    "id": 1927,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "51345:0:0"
                  },
                  "scope": 1946,
                  "src": "51290:205:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 7393,
              "src": "45572:5926:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1948,
                    "name": "IBasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 141,
                    "src": "51770:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBasicFDT_$141",
                      "typeString": "contract IBasicFDT"
                    }
                  },
                  "id": 1949,
                  "nodeType": "InheritanceSpecifier",
                  "src": "51770:9:0"
                }
              ],
              "contractDependencies": [
                77,
                141
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 1947,
                "nodeType": "StructuredDocumentation",
                "src": "51661:83:0",
                "text": "@title ExtendedFDT implements the FDT functionality for accounting for losses."
              },
              "fullyImplemented": false,
              "id": 2006,
              "linearizedBaseContracts": [
                2006,
                141,
                77
              ],
              "name": "IExtendedFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1950,
                    "nodeType": "StructuredDocumentation",
                    "src": "51787: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": 1954,
                  "name": "LossesPerShareUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1953,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1952,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1954,
                        "src": "51999:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1951,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "51999:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51998:9:0"
                  },
                  "src": "51971:37:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1955,
                    "nodeType": "StructuredDocumentation",
                    "src": "52014: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": 1961,
                  "name": "LossesCorrectionUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1960,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1957,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1961,
                        "src": "52284:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1956,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "52284:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1959,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1961,
                        "src": "52301:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1958,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "52301:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "52283:25:0"
                  },
                  "src": "52254:55:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1962,
                    "nodeType": "StructuredDocumentation",
                    "src": "52315: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": 1968,
                  "name": "LossesDistributed",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1967,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1964,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1968,
                        "src": "52587:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1963,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "52587:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1966,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1968,
                        "src": "52604:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1965,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "52604:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "52586:26:0"
                  },
                  "src": "52563:50:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1969,
                    "nodeType": "StructuredDocumentation",
                    "src": "52619: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": 1977,
                  "name": "LossesRecognized",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1976,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1971,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1977,
                        "src": "52975:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1970,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "52975:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1973,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1977,
                        "src": "52992:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1972,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "52992:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1975,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1977,
                        "src": "53001:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1974,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "53001:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "52974:35:0"
                  },
                  "src": "52952:58:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1978,
                    "nodeType": "StructuredDocumentation",
                    "src": "53016: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": 1985,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizableLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1981,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1980,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1985,
                        "src": "53256:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1979,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "53256:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "53255:16:0"
                  },
                  "returnParameters": {
                    "id": 1984,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1983,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1985,
                        "src": "53295:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1982,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "53295:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "53294:9:0"
                  },
                  "scope": 2006,
                  "src": "53226:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1986,
                    "nodeType": "StructuredDocumentation",
                    "src": "53310: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": 1993,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizedLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1989,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1988,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1993,
                        "src": "53552:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1987,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "53552:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "53551:16:0"
                  },
                  "returnParameters": {
                    "id": 1992,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1991,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1993,
                        "src": "53591:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1990,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "53591:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "53590:9:0"
                  },
                  "scope": 2006,
                  "src": "53524:76:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1994,
                    "nodeType": "StructuredDocumentation",
                    "src": "53606: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": 2001,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1997,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1996,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2001,
                        "src": "54069:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1995,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "54069:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "54068:16:0"
                  },
                  "returnParameters": {
                    "id": 2000,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1999,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2001,
                        "src": "54108:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1998,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "54108:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "54107:9:0"
                  },
                  "scope": 2006,
                  "src": "54039:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2002,
                    "nodeType": "StructuredDocumentation",
                    "src": "54123: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": 2005,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLossesReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2003,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "54511:2:0"
                  },
                  "returnParameters": {
                    "id": 2004,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "54522:0:0"
                  },
                  "scope": 2006,
                  "src": "54482:41:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "51744:2782:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 2008,
                    "name": "IExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2006,
                    "src": "54913:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExtendedFDT_$2006",
                      "typeString": "contract IExtendedFDT"
                    }
                  },
                  "id": 2009,
                  "nodeType": "InheritanceSpecifier",
                  "src": "54913:12:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 2010,
                    "name": "BasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1946,
                    "src": "54927:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BasicFDT_$1946",
                      "typeString": "contract BasicFDT"
                    }
                  },
                  "id": 2011,
                  "nodeType": "InheritanceSpecifier",
                  "src": "54927:8:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1076,
                1574,
                1946,
                2006
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 2007,
                "nodeType": "StructuredDocumentation",
                "src": "54797:83:0",
                "text": "@title ExtendedFDT implements the FDT functionality for accounting for losses."
              },
              "fullyImplemented": true,
              "id": 2379,
              "linearizedBaseContracts": [
                2379,
                1946,
                1574,
                2006,
                141,
                77,
                1076
              ],
              "name": "ExtendedFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 2014,
                  "libraryName": {
                    "contractScope": null,
                    "id": 2012,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "54949:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "54943:33:0",
                  "typeName": {
                    "id": 2013,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "54968:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 2017,
                  "libraryName": {
                    "contractScope": null,
                    "id": 2015,
                    "name": "SafeMathUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 684,
                    "src": "54987:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathUint_$684",
                      "typeString": "library SafeMathUint"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "54981:33:0",
                  "typeName": {
                    "id": 2016,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "55006:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 2020,
                  "libraryName": {
                    "contractScope": null,
                    "id": 2018,
                    "name": "SignedSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1055,
                    "src": "55025:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignedSafeMath_$1055",
                      "typeString": "library SignedSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "55019:33:0",
                  "typeName": {
                    "id": 2019,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "55045:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "id": 2023,
                  "libraryName": {
                    "contractScope": null,
                    "id": 2021,
                    "name": "SafeMathInt",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 661,
                    "src": "55063:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathInt_$661",
                      "typeString": "library SafeMathInt"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "55057:33:0",
                  "typeName": {
                    "id": 2022,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "55083:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 2025,
                  "mutability": "mutable",
                  "name": "lossesPerShare",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2379,
                  "src": "55096:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2024,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "55096:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2029,
                  "mutability": "mutable",
                  "name": "lossesCorrection",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2379,
                  "src": "55134:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                    "typeString": "mapping(address => int256)"
                  },
                  "typeName": {
                    "id": 2028,
                    "keyType": {
                      "id": 2026,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "55142:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "55134:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                      "typeString": "mapping(address => int256)"
                    },
                    "valueType": {
                      "id": 2027,
                      "name": "int256",
                      "nodeType": "ElementaryTypeName",
                      "src": "55153:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2033,
                  "mutability": "mutable",
                  "name": "recognizedLosses",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2379,
                  "src": "55193:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 2032,
                    "keyType": {
                      "id": 2030,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "55201:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "55193:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 2031,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "55212:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2044,
                    "nodeType": "Block",
                    "src": "55337:3:0",
                    "statements": []
                  },
                  "documentation": null,
                  "id": 2045,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2040,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2035,
                          "src": "55316:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2041,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2037,
                          "src": "55322:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 2042,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 2039,
                        "name": "BasicFDT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1946,
                        "src": "55307:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BasicFDT_$1946_$",
                          "typeString": "type(contract BasicFDT)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "55307:22:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2038,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2035,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2045,
                        "src": "55265:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2034,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "55265:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2037,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2045,
                        "src": "55285:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2036,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "55285:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "55264:42:0"
                  },
                  "returnParameters": {
                    "id": 2043,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "55337:0:0"
                  },
                  "scope": 2379,
                  "src": "55253:87:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2091,
                    "nodeType": "Block",
                    "src": "56267:351:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2055,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2052,
                                  "name": "totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1160,
                                  "src": "56285:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 2053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "56285:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 2054,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "56301:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "56285:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4644543a5a45524f5f535550504c59",
                              "id": 2056,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "56304:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a3114e332720ee805fc81c31b02342a611c667fffb8818a1e551e83759812e71",
                                "typeString": "literal_string \"FDT:ZERO_SUPPLY\""
                              },
                              "value": "FDT:ZERO_SUPPLY"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a3114e332720ee805fc81c31b02342a611c667fffb8818a1e551e83759812e71",
                                "typeString": "literal_string \"FDT:ZERO_SUPPLY\""
                              }
                            ],
                            "id": 2051,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "56277:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2057,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "56277:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2058,
                        "nodeType": "ExpressionStatement",
                        "src": "56277:45:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2059,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2048,
                            "src": "56337:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "56346:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "56337:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2063,
                        "nodeType": "IfStatement",
                        "src": "56333:23:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 2050,
                          "id": 2062,
                          "nodeType": "Return",
                          "src": "56349:7:0"
                        }
                      },
                      {
                        "assignments": [
                          2065
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2065,
                            "mutability": "mutable",
                            "name": "_lossesPerShare",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2091,
                            "src": "56366:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2064,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "56366:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2076,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2074,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2070,
                                    "name": "pointsMultiplier",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1596,
                                    "src": "56421:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2068,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2048,
                                    "src": "56411:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2069,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 791,
                                  "src": "56411:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 2071,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "56411:27:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2072,
                                  "name": "totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1160,
                                  "src": "56441:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 2073,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "56441:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "56411:43:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2066,
                              "name": "lossesPerShare",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2025,
                              "src": "56392:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2067,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "56392:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "56392:63:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "56366:89:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2077,
                            "name": "lossesPerShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2025,
                            "src": "56465:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2078,
                            "name": "_lossesPerShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2065,
                            "src": "56491:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "56465:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2080,
                        "nodeType": "ExpressionStatement",
                        "src": "56465:41:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2082,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "56540:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "56540:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2084,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2048,
                              "src": "56552:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2081,
                            "name": "LossesDistributed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1968,
                            "src": "56522:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 2085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "56522:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2086,
                        "nodeType": "EmitStatement",
                        "src": "56517:41:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2088,
                              "name": "_lossesPerShare",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2065,
                              "src": "56595:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2087,
                            "name": "LossesPerShareUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1954,
                            "src": "56573:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 2089,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "56573:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2090,
                        "nodeType": "EmitStatement",
                        "src": "56568:43:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2046,
                    "nodeType": "StructuredDocumentation",
                    "src": "55346:865:0",
                    "text": "@dev Distributes losses to token holders.\n@dev It reverts if the total supply of tokens is 0.\n@dev It emits a `LossesDistributed` event if the amount of received losses is greater than 0.\n@dev It emits a `LossesPerShareUpdated` event if the amount of received losses is greater than 0.\nAbout undistributed losses:\nIn each distribution, there is a small amount of losses which do not get distributed,\nwhich is `(value * pointsMultiplier) % totalSupply()`.\nWith a well-chosen `pointsMultiplier`, the amount losses that are not getting distributed\nin a distribution can be less than 1 (base unit).\nWe can actually keep track of the undistributed losses in a distribution\nand try to distribute it in the next distribution."
                  },
                  "id": 2092,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_distributeLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2049,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2048,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2092,
                        "src": "56243:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2047,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "56243:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "56242:15:0"
                  },
                  "returnParameters": {
                    "id": 2050,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "56267:0:0"
                  },
                  "scope": 2379,
                  "src": "56216:402:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2129,
                    "nodeType": "Block",
                    "src": "56967:311:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2098,
                            "name": "recognizableDividend",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2096,
                            "src": "56977:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2100,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "57021:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2101,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "57021:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "id": 2099,
                              "name": "recognizableLossesOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2148,
                              "src": "57000:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 2102,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "57000:32:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "56977:55:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2104,
                        "nodeType": "ExpressionStatement",
                        "src": "56977:55:0"
                      },
                      {
                        "assignments": [
                          2106
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2106,
                            "mutability": "mutable",
                            "name": "_recognizedLosses",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2129,
                            "src": "57043:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2105,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "57043:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2114,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2112,
                              "name": "recognizableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2096,
                              "src": "57107:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2107,
                                "name": "recognizedLosses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2033,
                                "src": "57074:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 2110,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2108,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "57091:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2109,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "57091:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "57074:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2111,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "57074:32:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2113,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57074:54:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "57043:85:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2115,
                              "name": "recognizedLosses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2033,
                              "src": "57138:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 2118,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2116,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "57155:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2117,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57155:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "57138:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2119,
                            "name": "_recognizedLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2106,
                            "src": "57169:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "57138:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2121,
                        "nodeType": "ExpressionStatement",
                        "src": "57138:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2123,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "57219:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57219:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2125,
                              "name": "recognizableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2096,
                              "src": "57231:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2126,
                              "name": "_recognizedLosses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2106,
                              "src": "57253:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2122,
                            "name": "LossesRecognized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1977,
                            "src": "57202:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 2127,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57202:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2128,
                        "nodeType": "EmitStatement",
                        "src": "57197:74:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2093,
                    "nodeType": "StructuredDocumentation",
                    "src": "56624:256:0",
                    "text": "@dev    Prepares losses for a withdrawal.\n@dev    It emits a `LossesWithdrawn` event if the amount of withdrawn losses is greater than 0.\n@return recognizableDividend The amount of dividend losses that can be recognized."
                  },
                  "id": 2130,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_prepareLossesWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2094,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "56916:2:0"
                  },
                  "returnParameters": {
                    "id": 2097,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2096,
                        "mutability": "mutable",
                        "name": "recognizableDividend",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2130,
                        "src": "56937:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2095,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "56937:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "56936:30:0"
                  },
                  "scope": 2379,
                  "src": "56885:393:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1985
                  ],
                  "body": {
                    "id": 2147,
                    "nodeType": "Block",
                    "src": "57369:82:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2142,
                                "name": "recognizedLosses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2033,
                                "src": "57419:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 2144,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2143,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2132,
                                "src": "57436:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "57419:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2139,
                                  "name": "_owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2132,
                                  "src": "57407:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2138,
                                "name": "accumulativeLossesOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2188,
                                "src": "57386:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 2140,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "57386:28:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2141,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 728,
                            "src": "57386:32:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57386:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2137,
                        "id": 2146,
                        "nodeType": "Return",
                        "src": "57379:65:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "66967791",
                  "id": 2148,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizableLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2134,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "57337:8:0"
                  },
                  "parameters": {
                    "id": 2133,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2132,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2148,
                        "src": "57314:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2131,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "57314:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57313:16:0"
                  },
                  "returnParameters": {
                    "id": 2137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2136,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2148,
                        "src": "57360:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2135,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "57360:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57359:9:0"
                  },
                  "scope": 2379,
                  "src": "57284:167:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1993
                  ],
                  "body": {
                    "id": 2160,
                    "nodeType": "Block",
                    "src": "57542:48:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2156,
                            "name": "recognizedLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2033,
                            "src": "57559:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2158,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2157,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2150,
                            "src": "57576:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "57559:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2155,
                        "id": 2159,
                        "nodeType": "Return",
                        "src": "57552:31:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "aed4966a",
                  "id": 2161,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizedLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2152,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "57510:8:0"
                  },
                  "parameters": {
                    "id": 2151,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2150,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2161,
                        "src": "57485:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2149,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "57485:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57484:16:0"
                  },
                  "returnParameters": {
                    "id": 2155,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2154,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2161,
                        "src": "57533:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2153,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "57533:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57532:9:0"
                  },
                  "scope": 2379,
                  "src": "57457:133:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2001
                  ],
                  "body": {
                    "id": 2187,
                    "nodeType": "Block",
                    "src": "57681:221:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 2178,
                                      "name": "lossesCorrection",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2029,
                                      "src": "57818:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                        "typeString": "mapping(address => int256)"
                                      }
                                    },
                                    "id": 2180,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 2179,
                                      "name": "_owner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2163,
                                      "src": "57835:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "57818:24:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 2172,
                                                "name": "_owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2163,
                                                "src": "57756:6:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "id": 2171,
                                              "name": "balanceOf",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1174,
                                              "src": "57746:9:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view returns (uint256)"
                                              }
                                            },
                                            "id": 2173,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "57746:17:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 2169,
                                            "name": "lossesPerShare",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2025,
                                            "src": "57710:14:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 2170,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 791,
                                          "src": "57710:35:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 2174,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "57710:54:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 2175,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toInt256Safe",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 683,
                                      "src": "57710:84:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (int256)"
                                      }
                                    },
                                    "id": 2176,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "57710:86:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "id": 2177,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1054,
                                  "src": "57710:107:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                                    "typeString": "function (int256,int256) pure returns (int256)"
                                  }
                                },
                                "id": 2181,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "57710:133:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 2182,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint256Safe",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 660,
                              "src": "57710:164:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                "typeString": "function (int256) pure returns (uint256)"
                              }
                            },
                            "id": 2183,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "57710:166:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2184,
                            "name": "pointsMultiplier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1596,
                            "src": "57879:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "57710:185:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2168,
                        "id": 2186,
                        "nodeType": "Return",
                        "src": "57691:204:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "40bde098",
                  "id": 2188,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2165,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "57649:8:0"
                  },
                  "parameters": {
                    "id": 2164,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2163,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2188,
                        "src": "57626:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2162,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "57626:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57625:16:0"
                  },
                  "returnParameters": {
                    "id": 2168,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2167,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2188,
                        "src": "57672:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2166,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "57672:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57671:9:0"
                  },
                  "scope": 2379,
                  "src": "57596:306:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1826
                  ],
                  "body": {
                    "id": 2256,
                    "nodeType": "Block",
                    "src": "58415:547:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2202,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2191,
                              "src": "58441:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2203,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2193,
                              "src": "58447:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2204,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2195,
                              "src": "58451:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2199,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "58425:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_ExtendedFDT_$2379",
                                "typeString": "contract super ExtendedFDT"
                              }
                            },
                            "id": 2201,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1826,
                            "src": "58425:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 2205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58425:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2206,
                        "nodeType": "ExpressionStatement",
                        "src": "58425:32:0"
                      },
                      {
                        "assignments": [
                          2208
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2208,
                            "mutability": "mutable",
                            "name": "_lossesCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2256,
                            "src": "58468:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2207,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "58468:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2215,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2211,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2195,
                                  "src": "58517:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2209,
                                  "name": "lossesPerShare",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2025,
                                  "src": "58498:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2210,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "58498:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2212,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "58498:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toInt256Safe",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 683,
                            "src": "58498:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (int256)"
                            }
                          },
                          "id": 2214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58498:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "58468:70:0"
                      },
                      {
                        "assignments": [
                          2217
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2217,
                            "mutability": "mutable",
                            "name": "lossesCorrectionFrom",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2256,
                            "src": "58548:27:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2216,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "58548:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2224,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2222,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2208,
                              "src": "58605:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2218,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2029,
                                "src": "58578:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 2220,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2219,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2191,
                                "src": "58595:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "58578:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 2221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1054,
                            "src": "58578:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 2223,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58578:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "58548:75:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2225,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "58633:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 2227,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2226,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2191,
                              "src": "58650:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "58633:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2228,
                            "name": "lossesCorrectionFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2217,
                            "src": "58663:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "58633:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 2230,
                        "nodeType": "ExpressionStatement",
                        "src": "58633:50:0"
                      },
                      {
                        "assignments": [
                          2232
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2232,
                            "mutability": "mutable",
                            "name": "lossesCorrectionTo",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2256,
                            "src": "58693:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2231,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "58693:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2239,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2237,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2208,
                              "src": "58748:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2233,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2029,
                                "src": "58723:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 2235,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2234,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2193,
                                "src": "58740:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "58723:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 2236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "58723:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 2238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58723:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "58693:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2240,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "58776:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 2242,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2241,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2193,
                              "src": "58793:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "58776:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2243,
                            "name": "lossesCorrectionTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2232,
                            "src": "58806:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "58776:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 2245,
                        "nodeType": "ExpressionStatement",
                        "src": "58776:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2247,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2191,
                              "src": "58864:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2248,
                              "name": "lossesCorrectionFrom",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2217,
                              "src": "58870:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 2246,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1961,
                            "src": "58840:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 2249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58840:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2250,
                        "nodeType": "EmitStatement",
                        "src": "58835:56:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2252,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2193,
                              "src": "58930:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2253,
                              "name": "lossesCorrectionTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2232,
                              "src": "58936:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 2251,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1961,
                            "src": "58906:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 2254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58906:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2255,
                        "nodeType": "EmitStatement",
                        "src": "58901:54:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2189,
                    "nodeType": "StructuredDocumentation",
                    "src": "57908:386:0",
                    "text": "@dev   Transfers tokens from one account to another. Updates pointsCorrection to keep funds unchanged.\n@dev         It emits two `LossesCorrectionUpdated` events, one for the sender and one for the receiver.\n@param from  The address to transfer from.\n@param to    The address to transfer to.\n@param value The amount to be transferred."
                  },
                  "id": 2257,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2197,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "58406:8:0"
                  },
                  "parameters": {
                    "id": 2196,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2191,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2257,
                        "src": "58327:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2190,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "58327:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2193,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2257,
                        "src": "58349:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2192,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "58349:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2195,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2257,
                        "src": "58369:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2194,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "58369:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "58317:71:0"
                  },
                  "returnParameters": {
                    "id": 2198,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "58415:0:0"
                  },
                  "scope": 2379,
                  "src": "58299:663:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1869
                  ],
                  "body": {
                    "id": 2299,
                    "nodeType": "Block",
                    "src": "59339:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2269,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2260,
                              "src": "59361:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2270,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2262,
                              "src": "59370:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2266,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "59349:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_ExtendedFDT_$2379",
                                "typeString": "contract super ExtendedFDT"
                              }
                            },
                            "id": 2268,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_mint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1869,
                            "src": "59349:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 2271,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "59349:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2272,
                        "nodeType": "ExpressionStatement",
                        "src": "59349:27:0"
                      },
                      {
                        "assignments": [
                          2274
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2274,
                            "mutability": "mutable",
                            "name": "_lossesCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2299,
                            "src": "59387:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2273,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "59387:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2287,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 2281,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2262,
                                          "src": "59477:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2279,
                                          "name": "lossesPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2025,
                                          "src": "59458:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 2280,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 791,
                                        "src": "59458:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 2282,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "59458:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2283,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "59457:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2284,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 683,
                                "src": "59457:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 2285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "59457:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2275,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2029,
                                "src": "59414:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 2277,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2276,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2260,
                                "src": "59431:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "59414:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 2278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "59414:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 2286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "59414:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "59387:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2288,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "59520:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 2290,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2289,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2260,
                              "src": "59537:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "59520:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2291,
                            "name": "_lossesCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2274,
                            "src": "59548:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "59520:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 2293,
                        "nodeType": "ExpressionStatement",
                        "src": "59520:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2295,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2260,
                              "src": "59605:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2296,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2274,
                              "src": "59614:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 2294,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1961,
                            "src": "59581:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 2297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "59581:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2298,
                        "nodeType": "EmitStatement",
                        "src": "59576:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2258,
                    "nodeType": "StructuredDocumentation",
                    "src": "58968:293:0",
                    "text": "@dev   Mints tokens to an account. Updates lossesCorrection to keep losses unchanged.\n@dev   It emits a `LossesCorrectionUpdated` event.\n@param account The account that will receive the created tokens.\n@param value   The amount that will be created."
                  },
                  "id": 2300,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2264,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "59330:8:0"
                  },
                  "parameters": {
                    "id": 2263,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2260,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2300,
                        "src": "59281:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2259,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "59281:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2262,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2300,
                        "src": "59298:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2261,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "59298:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "59280:32:0"
                  },
                  "returnParameters": {
                    "id": 2265,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "59339:0:0"
                  },
                  "scope": 2379,
                  "src": "59266:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1912
                  ],
                  "body": {
                    "id": 2342,
                    "nodeType": "Block",
                    "src": "60030:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2312,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2303,
                              "src": "60052:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2313,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2305,
                              "src": "60061:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2309,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "60040:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_ExtendedFDT_$2379",
                                "typeString": "contract super ExtendedFDT"
                              }
                            },
                            "id": 2311,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_burn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1912,
                            "src": "60040:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 2314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60040:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2315,
                        "nodeType": "ExpressionStatement",
                        "src": "60040:27:0"
                      },
                      {
                        "assignments": [
                          2317
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2317,
                            "mutability": "mutable",
                            "name": "_lossesCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2342,
                            "src": "60078:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2316,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "60078:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2330,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 2324,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2305,
                                          "src": "60168:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2322,
                                          "name": "lossesPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2025,
                                          "src": "60149:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 2323,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 791,
                                        "src": "60149:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 2325,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "60149:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2326,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "60148:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2327,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 683,
                                "src": "60148:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 2328,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "60148:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2318,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2029,
                                "src": "60105:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 2320,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2319,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2303,
                                "src": "60122:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "60105:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 2321,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1054,
                            "src": "60105:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 2329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60105:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "60078:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2331,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "60211:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 2333,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2332,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2303,
                              "src": "60228:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "60211:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2334,
                            "name": "_lossesCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2317,
                            "src": "60239:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "60211:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 2336,
                        "nodeType": "ExpressionStatement",
                        "src": "60211:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2338,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2303,
                              "src": "60296:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2339,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2317,
                              "src": "60305:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 2337,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1961,
                            "src": "60272:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 2340,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60272:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2341,
                        "nodeType": "EmitStatement",
                        "src": "60267:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2301,
                    "nodeType": "StructuredDocumentation",
                    "src": "59645:307:0",
                    "text": "@dev   Burns an amount of the token of a given account. Updates lossesCorrection to keep losses unchanged.\n@dev   It emits a `LossesCorrectionUpdated` event.\n@param account The account from which tokens will be burnt.\n@param value   The amount that will be burnt."
                  },
                  "id": 2343,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2307,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "60021:8:0"
                  },
                  "parameters": {
                    "id": 2306,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2303,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2343,
                        "src": "59972:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2302,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "59972:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2305,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2343,
                        "src": "59989:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2304,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "59989:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "59971:32:0"
                  },
                  "returnParameters": {
                    "id": 2308,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60030:0:0"
                  },
                  "scope": 2379,
                  "src": "59957:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    2005
                  ],
                  "body": {
                    "id": 2363,
                    "nodeType": "Block",
                    "src": "60392:150:0",
                    "statements": [
                      {
                        "assignments": [
                          2348
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2348,
                            "mutability": "mutable",
                            "name": "newLosses",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2363,
                            "src": "60402:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2347,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "60402:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2351,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2349,
                            "name": "_updateLossesBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2378,
                            "src": "60421:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 2350,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60421:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "60402:41:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 2354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2352,
                            "name": "newLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2348,
                            "src": "60458:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2353,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "60471:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "60458:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2356,
                        "nodeType": "IfStatement",
                        "src": "60454:27:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 2346,
                          "id": 2355,
                          "nodeType": "Return",
                          "src": "60474:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2358,
                                  "name": "newLosses",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2348,
                                  "src": "60509:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 2359,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toUint256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 660,
                                "src": "60509:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                  "typeString": "function (int256) pure returns (uint256)"
                                }
                              },
                              "id": 2360,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "60509:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2357,
                            "name": "_distributeLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2092,
                            "src": "60491:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 2361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60491:44:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2362,
                        "nodeType": "ExpressionStatement",
                        "src": "60491:44:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "cc0fef02",
                  "id": 2364,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLossesReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2345,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "60375:8:0"
                  },
                  "parameters": {
                    "id": 2344,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60365:2:0"
                  },
                  "returnParameters": {
                    "id": 2346,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60392:0:0"
                  },
                  "scope": 2379,
                  "src": "60336:206:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2370,
                    "nodeType": "Block",
                    "src": "60720:3:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 2365,
                    "nodeType": "StructuredDocumentation",
                    "src": "60548:97:0",
                    "text": "@dev Recognizes all recognizable losses for an account using loss accounting."
                  },
                  "id": 2371,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_recognizeLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2366,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60675:2:0"
                  },
                  "returnParameters": {
                    "id": 2369,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2368,
                        "mutability": "mutable",
                        "name": "losses",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2371,
                        "src": "60704:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "60704:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "60703:16:0"
                  },
                  "scope": 2379,
                  "src": "60650:73:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2377,
                    "nodeType": "Block",
                    "src": "61022:3:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 2372,
                    "nodeType": "StructuredDocumentation",
                    "src": "60729:222:0",
                    "text": "@dev    Updates the current losses balance and returns the difference of the new and previous losses balance.\n@return A int256 representing the difference of the new and previous losses balance."
                  },
                  "id": 2378,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateLossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2373,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60985:2:0"
                  },
                  "returnParameters": {
                    "id": 2376,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2375,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2378,
                        "src": "61014:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2374,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "61014:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "61013:8:0"
                  },
                  "scope": 2379,
                  "src": "60956:69:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 7393,
              "src": "54880:6148:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2380,
                "nodeType": "StructuredDocumentation",
                "src": "61123:104:0",
                "text": "@title MapleGlobals maintains a central source of parameters and allowlists for the Maple protocol."
              },
              "fullyImplemented": false,
              "id": 2870,
              "linearizedBaseContracts": [
                2870
              ],
              "name": "IMapleGlobals",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2381,
                    "nodeType": "StructuredDocumentation",
                    "src": "61258:91:0",
                    "text": "@dev   Emits an event indicating the MapleGlobals contract was created."
                  },
                  "id": 2383,
                  "name": "Initialized",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2382,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "61371:2:0"
                  },
                  "src": "61354:20:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2384,
                    "nodeType": "StructuredDocumentation",
                    "src": "61380:336:0",
                    "text": "@dev   Emits an event indicating the validity of a Collateral Asset was set.\n@param asset    The Collateral Asset to assign validity to.\n@param decimals The number of decimal places of `asset`.\n@param symbol   The symbol of `asset`.\n@param valid    The new validity status of `asset`."
                  },
                  "id": 2394,
                  "name": "CollateralAssetSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2393,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2386,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2394,
                        "src": "61746:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2385,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "61746:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2388,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "decimals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2394,
                        "src": "61761:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2387,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "61761:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2390,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2394,
                        "src": "61779:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2389,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "61779:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2392,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2394,
                        "src": "61794:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2391,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "61794:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "61745:60:0"
                  },
                  "src": "61721:85:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2395,
                    "nodeType": "StructuredDocumentation",
                    "src": "61812:334:0",
                    "text": "@dev   Emits an event indicating the validity of a Liquidity Asset was set.\n@param asset    The Liquidity Asset to assign validity to.\n@param decimals The number of decimal places of `asset`.\n@param symbol   The symbol of `asset`.\n@param valid    The new validity status of `asset`."
                  },
                  "id": 2405,
                  "name": "LiquidityAssetSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2404,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2397,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2405,
                        "src": "62175:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2396,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62175:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2399,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "decimals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2405,
                        "src": "62190:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2398,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "62190:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2401,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2405,
                        "src": "62208:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2400,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "62208:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2403,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2405,
                        "src": "62223:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2402,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "62223:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62174:60:0"
                  },
                  "src": "62151:84:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2406,
                    "nodeType": "StructuredDocumentation",
                    "src": "62241:183:0",
                    "text": "@dev   Emits an event indicating the Oracle for an asset was set.\n@param asset  The asset to update price for.\n@param oracle The new Oracle to use."
                  },
                  "id": 2412,
                  "name": "OracleSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2411,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2408,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2412,
                        "src": "62445:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2407,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62445:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2410,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oracle",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2412,
                        "src": "62460:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2409,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62460:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62444:31:0"
                  },
                  "src": "62429:47:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2413,
                    "nodeType": "StructuredDocumentation",
                    "src": "62482:40:0",
                    "text": "@dev This is unused."
                  },
                  "id": 2419,
                  "name": "TransferRestrictionExemptionSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2415,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "exemptedContract",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2419,
                        "src": "62565:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2414,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62565:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2417,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2419,
                        "src": "62599:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2416,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "62599:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62564:46:0"
                  },
                  "src": "62527:84:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2420,
                    "nodeType": "StructuredDocumentation",
                    "src": "62617:232:0",
                    "text": "@dev   Emits an event indicating the validity of a Balancer Pool was set.\n@param balancerPool The address of Balancer Pool contract.\n@param valid        The new validity status of a Balancer Pool."
                  },
                  "id": 2426,
                  "name": "BalancerPoolSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2425,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2422,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2426,
                        "src": "62876:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2421,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62876:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2424,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2426,
                        "src": "62898:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2423,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "62898:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62875:34:0"
                  },
                  "src": "62854:56:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2427,
                    "nodeType": "StructuredDocumentation",
                    "src": "62916:151:0",
                    "text": "@dev   Emits an event indicating a PendingGovernor was set.\n@param pendingGovernor The address of the new Pending Governor."
                  },
                  "id": 2431,
                  "name": "PendingGovernorSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2430,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2429,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "pendingGovernor",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2431,
                        "src": "63097:31:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2428,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "63097:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63096:33:0"
                  },
                  "src": "63072:58:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2432,
                    "nodeType": "StructuredDocumentation",
                    "src": "63136:164:0",
                    "text": "@dev   Emits an event indicating Governorship was accepted by a new account.\n@param governor The account that has accepted Governorship."
                  },
                  "id": 2436,
                  "name": "GovernorAccepted",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2435,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2434,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "governor",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2436,
                        "src": "63328:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2433,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "63328:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63327:26:0"
                  },
                  "src": "63305:49:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2437,
                    "nodeType": "StructuredDocumentation",
                    "src": "63360:225:0",
                    "text": "@dev   Emits an event indicating that some Governor controlled parameter was set.\n@param which The identifier of the parameter that was set.\n@param value The value the parameter was set to."
                  },
                  "id": 2443,
                  "name": "GlobalsParamSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2442,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2439,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "which",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2443,
                        "src": "63612:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2438,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "63612:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2441,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2443,
                        "src": "63635:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2440,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "63635:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63611:38:0"
                  },
                  "src": "63590:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2444,
                    "nodeType": "StructuredDocumentation",
                    "src": "63656:211:0",
                    "text": "@dev   Emits an event indicating that some Governor controlled address was set.\n@param which The identifier of the address that was set.\n@param addr  The address that was set."
                  },
                  "id": 2450,
                  "name": "GlobalsAddressSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2449,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2446,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "which",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2450,
                        "src": "63896:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2445,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "63896:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2448,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "addr",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2450,
                        "src": "63919:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2447,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "63919:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63895:37:0"
                  },
                  "src": "63872:61:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2451,
                    "nodeType": "StructuredDocumentation",
                    "src": "63939:148:0",
                    "text": "@dev   Emits an event indicating the protocol's paused state has been set.\n@param pause Whether the protocol was paused."
                  },
                  "id": 2455,
                  "name": "ProtocolPaused",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2454,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2453,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "pause",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2455,
                        "src": "64113:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2452,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "64113:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64112:12:0"
                  },
                  "src": "64092:33:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2456,
                    "nodeType": "StructuredDocumentation",
                    "src": "64131:143:0",
                    "text": "@dev   Emits an event indicating the GlobalAdmin was set.\n@param newGlobalAdmin The address of the new GlobalAdmin."
                  },
                  "id": 2460,
                  "name": "GlobalAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2459,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2458,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newGlobalAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2460,
                        "src": "64300:30:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2457,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "64300:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64299:32:0"
                  },
                  "src": "64279:53:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2461,
                    "nodeType": "StructuredDocumentation",
                    "src": "64338:230:0",
                    "text": "@dev   Emits an event indicating the validity of a Pool Delegate was set.\n@param poolDelegate The address of a Pool Delegate.\n@param valid        Whether `poolDelegate` is a valid Pool Delegate."
                  },
                  "id": 2467,
                  "name": "PoolDelegateSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2466,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2463,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2467,
                        "src": "64595:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2462,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "64595:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2465,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2467,
                        "src": "64625:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2464,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "64625:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64594:42:0"
                  },
                  "src": "64573:64:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2468,
                    "nodeType": "StructuredDocumentation",
                    "src": "64643:73:0",
                    "text": "@dev The ERC-2222 Maple Token for the Maple protocol."
                  },
                  "functionSelector": "a0530946",
                  "id": 2473,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mpl",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2469,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "64733:2:0"
                  },
                  "returnParameters": {
                    "id": 2472,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2471,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2473,
                        "src": "64759:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2470,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "64759:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64758:9:0"
                  },
                  "scope": 2870,
                  "src": "64721:47:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2474,
                    "nodeType": "StructuredDocumentation",
                    "src": "64774:142:0",
                    "text": "@dev The Governor that is declared for governorship transfer. \n@dev Must be accepted for transfer to take effect. "
                  },
                  "functionSelector": "e3056a34",
                  "id": 2479,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pendingGovernor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2475,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "64945:2:0"
                  },
                  "returnParameters": {
                    "id": 2478,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2477,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2479,
                        "src": "64971:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2476,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "64971:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64970:9:0"
                  },
                  "scope": 2870,
                  "src": "64921:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2480,
                    "nodeType": "StructuredDocumentation",
                    "src": "64986:91:0",
                    "text": "@dev The Governor responsible for management of global Maple variables."
                  },
                  "functionSelector": "0c340a24",
                  "id": 2485,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "governor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2481,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "65099:2:0"
                  },
                  "returnParameters": {
                    "id": 2484,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2483,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2485,
                        "src": "65125:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2482,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "65125:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65124:9:0"
                  },
                  "scope": 2870,
                  "src": "65082:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2486,
                    "nodeType": "StructuredDocumentation",
                    "src": "65140:125:0",
                    "text": "@dev The MapleTreasury is the Treasury where all fees pass through for conversion, prior to distribution."
                  },
                  "functionSelector": "a5a27605",
                  "id": 2491,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mapleTreasury",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2487,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "65292:2:0"
                  },
                  "returnParameters": {
                    "id": 2490,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2489,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2491,
                        "src": "65318:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2488,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "65318:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65317:9:0"
                  },
                  "scope": 2870,
                  "src": "65270:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2492,
                    "nodeType": "StructuredDocumentation",
                    "src": "65333:147:0",
                    "text": "@dev The Global Admin of the whole network. \n@dev Has the power to switch off/on the functionality of entire protocol. "
                  },
                  "functionSelector": "ec9a9368",
                  "id": 2497,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "globalAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2493,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "65505:2:0"
                  },
                  "returnParameters": {
                    "id": 2496,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2495,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2497,
                        "src": "65531:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2494,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "65531:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65530:9:0"
                  },
                  "scope": 2870,
                  "src": "65485:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2498,
                    "nodeType": "StructuredDocumentation",
                    "src": "65546:119:0",
                    "text": "@dev The amount of time a Borrower has to make a missed payment before a default can be triggered. "
                  },
                  "functionSelector": "705d5f24",
                  "id": 2503,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defaultGracePeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2499,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "65697:2:0"
                  },
                  "returnParameters": {
                    "id": 2502,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2501,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2503,
                        "src": "65723:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2500,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "65723:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65722:9:0"
                  },
                  "scope": 2870,
                  "src": "65670:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2504,
                    "nodeType": "StructuredDocumentation",
                    "src": "65738:126:0",
                    "text": "@dev The minimum amount of Pool cover that a Pool Delegate has to provide before they can finalize a Pool."
                  },
                  "functionSelector": "3106374c",
                  "id": 2509,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swapOutRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2505,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "65893:2:0"
                  },
                  "returnParameters": {
                    "id": 2508,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2507,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2509,
                        "src": "65919:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2506,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "65919:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65918:9:0"
                  },
                  "scope": 2870,
                  "src": "65869:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2510,
                    "nodeType": "StructuredDocumentation",
                    "src": "65934:116:0",
                    "text": "@dev The amount of time to allow a Borrower to drawdown on their Loan after funding period ends."
                  },
                  "functionSelector": "74d7c62b",
                  "id": 2515,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundingPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2511,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66077:2:0"
                  },
                  "returnParameters": {
                    "id": 2514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2513,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2515,
                        "src": "66103:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2512,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66103:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66102:9:0"
                  },
                  "scope": 2870,
                  "src": "66055:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2516,
                    "nodeType": "StructuredDocumentation",
                    "src": "66118:104:0",
                    "text": "@dev The portion of drawdown that goes to the Pool Delegates and individual Lenders."
                  },
                  "functionSelector": "16a12d7a",
                  "id": 2521,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "investorFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2517,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66247:2:0"
                  },
                  "returnParameters": {
                    "id": 2520,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2519,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2521,
                        "src": "66273:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2518,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66273:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66272:9:0"
                  },
                  "scope": 2870,
                  "src": "66227:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2522,
                    "nodeType": "StructuredDocumentation",
                    "src": "66288:80:0",
                    "text": "@dev The portion of drawdown that goes to the MapleTreasury."
                  },
                  "functionSelector": "cc32d176",
                  "id": 2527,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "treasuryFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2523,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66393:2:0"
                  },
                  "returnParameters": {
                    "id": 2526,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2525,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2527,
                        "src": "66419:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2524,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66419:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66418:9:0"
                  },
                  "scope": 2870,
                  "src": "66373:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2528,
                    "nodeType": "StructuredDocumentation",
                    "src": "66434:81:0",
                    "text": "@dev The maximum amount of slippage for Uniswap transactions."
                  },
                  "functionSelector": "55323195",
                  "id": 2533,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "maxSwapSlippage",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2529,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66544:2:0"
                  },
                  "returnParameters": {
                    "id": 2532,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2531,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2533,
                        "src": "66570:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2530,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66570:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66569:9:0"
                  },
                  "scope": 2870,
                  "src": "66520:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2534,
                    "nodeType": "StructuredDocumentation",
                    "src": "66585:130:0",
                    "text": "@dev The minimum amount of LoanFDTs required to trigger liquidations (basis points percentage of totalSupply)."
                  },
                  "functionSelector": "4a2697c4",
                  "id": 2539,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "minLoanEquity",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2535,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66742:2:0"
                  },
                  "returnParameters": {
                    "id": 2538,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2537,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2539,
                        "src": "66768:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2536,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66768:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66767:9:0"
                  },
                  "scope": 2870,
                  "src": "66720:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2540,
                    "nodeType": "StructuredDocumentation",
                    "src": "66783:119:0",
                    "text": "@dev The period (in secs) after which Stakers are allowed to unstake their BPTs from a StakeLocker."
                  },
                  "functionSelector": "a965d6b5",
                  "id": 2545,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakerCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2541,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66936:2:0"
                  },
                  "returnParameters": {
                    "id": 2544,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2543,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2545,
                        "src": "66962:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2542,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66962:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66961:9:0"
                  },
                  "scope": 2870,
                  "src": "66907:64:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2546,
                    "nodeType": "StructuredDocumentation",
                    "src": "66977:110:0",
                    "text": "@dev The period (in secs) after which LPs are allowed to withdraw their funds from a Pool."
                  },
                  "functionSelector": "dd02e0ec",
                  "id": 2551,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lpCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2547,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "67117:2:0"
                  },
                  "returnParameters": {
                    "id": 2550,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2549,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2551,
                        "src": "67143:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2548,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "67143:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67142:9:0"
                  },
                  "scope": 2870,
                  "src": "67092:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2552,
                    "nodeType": "StructuredDocumentation",
                    "src": "67158:161:0",
                    "text": "@dev The window of time (in secs) after `stakerCooldownPeriod` that an account has to withdraw before their intent to unstake is invalidated."
                  },
                  "functionSelector": "2018b870",
                  "id": 2557,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakerUnstakeWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2553,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "67352:2:0"
                  },
                  "returnParameters": {
                    "id": 2556,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2555,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2557,
                        "src": "67378:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2554,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "67378:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67377:9:0"
                  },
                  "scope": 2870,
                  "src": "67324:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2558,
                    "nodeType": "StructuredDocumentation",
                    "src": "67393:158:0",
                    "text": "@dev The window of time (in secs) after `lpCooldownPeriod` that an account has to withdraw before their intent to withdraw is invalidated."
                  },
                  "functionSelector": "df3d02bd",
                  "id": 2563,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lpWithdrawWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2559,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "67581:2:0"
                  },
                  "returnParameters": {
                    "id": 2562,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2561,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2563,
                        "src": "67607:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2560,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "67607:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67606:9:0"
                  },
                  "scope": 2870,
                  "src": "67556:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2564,
                    "nodeType": "StructuredDocumentation",
                    "src": "67622:84:0",
                    "text": "@dev Whether the functionality of the entire protocol is paused."
                  },
                  "functionSelector": "425fad58",
                  "id": 2569,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "protocolPaused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2565,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "67734:2:0"
                  },
                  "returnParameters": {
                    "id": 2568,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2567,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2569,
                        "src": "67760:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2566,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "67760:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67759:6:0"
                  },
                  "scope": 2870,
                  "src": "67711:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2570,
                    "nodeType": "StructuredDocumentation",
                    "src": "67772:127:0",
                    "text": "@param  liquidityAsset The address of a Liquidity Asset.\n@return Whether `liquidityAsset` is valid."
                  },
                  "functionSelector": "8695118a",
                  "id": 2577,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidLiquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2573,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2572,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2577,
                        "src": "67935:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2571,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "67935:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67934:24:0"
                  },
                  "returnParameters": {
                    "id": 2576,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2575,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2577,
                        "src": "67982:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2574,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "67982:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67981:6:0"
                  },
                  "scope": 2870,
                  "src": "67904:84:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2578,
                    "nodeType": "StructuredDocumentation",
                    "src": "67994:130:0",
                    "text": "@param  collateralAsset The address of a Collateral Asset.\n@return Whether `collateralAsset` is valid."
                  },
                  "functionSelector": "8c14834b",
                  "id": 2585,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidCollateralAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2580,
                        "mutability": "mutable",
                        "name": "collateralAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2585,
                        "src": "68161:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2579,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "68161:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68160:25:0"
                  },
                  "returnParameters": {
                    "id": 2584,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2583,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2585,
                        "src": "68209:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2582,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "68209:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68208:6:0"
                  },
                  "scope": 2870,
                  "src": "68129:86:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2586,
                    "nodeType": "StructuredDocumentation",
                    "src": "68221:102:0",
                    "text": "@param  calc The address of a Calculator.\n@return Whether `calc` is valid."
                  },
                  "functionSelector": "1beb84e7",
                  "id": 2593,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "validCalcs",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2589,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2588,
                        "mutability": "mutable",
                        "name": "calc",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2593,
                        "src": "68348:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2587,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "68348:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68347:14:0"
                  },
                  "returnParameters": {
                    "id": 2592,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2591,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2593,
                        "src": "68385:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2590,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "68385:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68384:6:0"
                  },
                  "scope": 2870,
                  "src": "68328:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2594,
                    "nodeType": "StructuredDocumentation",
                    "src": "68397:198:0",
                    "text": "@dev    Prevents unauthorized/unknown addresses from creating Pools.\n@param  poolDelegate The address of a Pool Delegate.\n@return Whether `poolDelegate` is valid."
                  },
                  "functionSelector": "372e3546",
                  "id": 2601,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidPoolDelegate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2597,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2596,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2601,
                        "src": "68629:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2595,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "68629:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68628:22:0"
                  },
                  "returnParameters": {
                    "id": 2600,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2599,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2601,
                        "src": "68674:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2598,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "68674:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68673:6:0"
                  },
                  "scope": 2870,
                  "src": "68600:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2602,
                    "nodeType": "StructuredDocumentation",
                    "src": "68686:147:0",
                    "text": "@param  balancerPool The address of a Balancer Pool.\n@return Whether Maple has approved `balancerPool` for BPT staking."
                  },
                  "functionSelector": "72a22d71",
                  "id": 2609,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidBalancerPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2605,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2604,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2609,
                        "src": "68867:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2603,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "68867:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68866:22:0"
                  },
                  "returnParameters": {
                    "id": 2608,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2607,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2609,
                        "src": "68912:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2606,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "68912:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68911:6:0"
                  },
                  "scope": 2870,
                  "src": "68838:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2610,
                    "nodeType": "StructuredDocumentation",
                    "src": "68924:768:0",
                    "text": "@dev Determines the liquidation path of various assets in Loans and the Treasury. \n@dev The value provided will determine whether or not to perform a bilateral or triangular swap on Uniswap. \n@dev For example, `defaultUniswapPath[WBTC][USDC]` value would indicate what asset to convert WBTC into before conversion to USDC. \n@dev If `defaultUniswapPath[WBTC][USDC] == USDC`, then the swap is bilateral and no middle asset is swapped. \n@dev If `defaultUniswapPath[WBTC][USDC] == WETH`, then swap WBTC for WETH, then WETH for USDC. \n@param  tokenA The address of the asset being swapped.\n@param  tokenB The address of the final asset to receive.\n@return The intermediary asset for swaps, if any."
                  },
                  "functionSelector": "4d866592",
                  "id": 2619,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defaultUniswapPath",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2615,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2612,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2619,
                        "src": "69725:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2611,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69725:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2614,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2619,
                        "src": "69741:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2613,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69741:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69724:32:0"
                  },
                  "returnParameters": {
                    "id": 2618,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2617,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2619,
                        "src": "69780:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2616,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69780:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69779:9:0"
                  },
                  "scope": 2870,
                  "src": "69697:92:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2620,
                    "nodeType": "StructuredDocumentation",
                    "src": "69795:123:0",
                    "text": "@param  asset The address of some token.\n@return The Chainlink Oracle for the price of `asset`."
                  },
                  "functionSelector": "aed019b9",
                  "id": 2627,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "oracleFor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2623,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2622,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2627,
                        "src": "69942:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2621,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69942:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69941:15:0"
                  },
                  "returnParameters": {
                    "id": 2626,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2625,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2627,
                        "src": "69980:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2624,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69980:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69979:9:0"
                  },
                  "scope": 2870,
                  "src": "69923:66:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2628,
                    "nodeType": "StructuredDocumentation",
                    "src": "69999:118:0",
                    "text": "@param  poolFactory The address of a Pool Factory.\n@return Whether `poolFactory` is valid."
                  },
                  "functionSelector": "107c0240",
                  "id": 2635,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidPoolFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2631,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2630,
                        "mutability": "mutable",
                        "name": "poolFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2635,
                        "src": "70150:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2629,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "70150:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70149:21:0"
                  },
                  "returnParameters": {
                    "id": 2634,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2633,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2635,
                        "src": "70194:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2632,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "70194:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70193:6:0"
                  },
                  "scope": 2870,
                  "src": "70122:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2636,
                    "nodeType": "StructuredDocumentation",
                    "src": "70206:118:0",
                    "text": "@param  loanFactory The address of a Loan Factory.\n@return Whether `loanFactory` is valid."
                  },
                  "functionSelector": "b53afda7",
                  "id": 2643,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidLoanFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2639,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2638,
                        "mutability": "mutable",
                        "name": "loanFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2643,
                        "src": "70357:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2637,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "70357:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70356:21:0"
                  },
                  "returnParameters": {
                    "id": 2642,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2641,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2643,
                        "src": "70401:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2640,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "70401:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70400:6:0"
                  },
                  "scope": 2870,
                  "src": "70329:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2644,
                    "nodeType": "StructuredDocumentation",
                    "src": "70417:266:0",
                    "text": "@param  superFactory The core factory (e.g. PoolFactory, LoanFactory).\n@param  subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n@return Whether `subFactory` is valid as it relates to `superFactory`."
                  },
                  "functionSelector": "1b1804aa",
                  "id": 2653,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "validSubFactories",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2649,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2646,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2653,
                        "src": "70715:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2645,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "70715:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2648,
                        "mutability": "mutable",
                        "name": "subFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2653,
                        "src": "70737:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2647,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "70737:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70714:42:0"
                  },
                  "returnParameters": {
                    "id": 2652,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2651,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2653,
                        "src": "70780:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2650,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "70780:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70779:6:0"
                  },
                  "scope": 2870,
                  "src": "70688:98:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2654,
                    "nodeType": "StructuredDocumentation",
                    "src": "70796:363:0",
                    "text": "@dev   Sets the Staker cooldown period. \n@dev   This change will affect the existing cool down period for the Stakers that already intended to unstake. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param newCooldownPeriod The new value for the cool down period."
                  },
                  "functionSelector": "fd4a9121",
                  "id": 2659,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakerCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2657,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2656,
                        "mutability": "mutable",
                        "name": "newCooldownPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2659,
                        "src": "71197:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2655,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "71197:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "71196:27:0"
                  },
                  "returnParameters": {
                    "id": 2658,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "71232:0:0"
                  },
                  "scope": 2870,
                  "src": "71164:69:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2660,
                    "nodeType": "StructuredDocumentation",
                    "src": "71239:368:0",
                    "text": "@dev   Sets the Liquidity Pool cooldown period. \n@dev   This change will affect the existing cool down period for the LPs that already intended to withdraw. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param newCooldownPeriod The new value for the cool down period."
                  },
                  "functionSelector": "8608a6e1",
                  "id": 2665,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLpCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2663,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2662,
                        "mutability": "mutable",
                        "name": "newCooldownPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2665,
                        "src": "71641:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2661,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "71641:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "71640:27:0"
                  },
                  "returnParameters": {
                    "id": 2664,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "71676:0:0"
                  },
                  "scope": 2870,
                  "src": "71612:65:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2666,
                    "nodeType": "StructuredDocumentation",
                    "src": "71683:349:0",
                    "text": "@dev   Sets the Staker unstake window. \n@dev   This change will affect the existing window for the Stakers that already intended to unstake. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param newUnstakeWindow The new value for the unstake window."
                  },
                  "functionSelector": "d1cdf301",
                  "id": 2671,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakerUnstakeWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2669,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2668,
                        "mutability": "mutable",
                        "name": "newUnstakeWindow",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2671,
                        "src": "72069:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2667,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72069:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72068:26:0"
                  },
                  "returnParameters": {
                    "id": 2670,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72103:0:0"
                  },
                  "scope": 2870,
                  "src": "72037:67:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2672,
                    "nodeType": "StructuredDocumentation",
                    "src": "72110:359:0",
                    "text": "@dev   Sets the Liquidity Pool withdraw window. \n@dev   This change will affect the existing window for the LPs that already intended to withdraw. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param newLpWithdrawWindow The new value for the withdraw window."
                  },
                  "functionSelector": "26718606",
                  "id": 2677,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLpWithdrawWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2675,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2674,
                        "mutability": "mutable",
                        "name": "newLpWithdrawWindow",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2677,
                        "src": "72503:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2673,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72503:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72502:29:0"
                  },
                  "returnParameters": {
                    "id": 2676,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72540:0:0"
                  },
                  "scope": 2870,
                  "src": "72474:67:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2678,
                    "nodeType": "StructuredDocumentation",
                    "src": "72547:280:0",
                    "text": "@dev   Sets the allowed Uniswap slippage percentage, in basis points. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param newMaxSlippage The new max slippage percentage (in basis points)"
                  },
                  "functionSelector": "f33ef09a",
                  "id": 2683,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMaxSwapSlippage",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2681,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2680,
                        "mutability": "mutable",
                        "name": "newMaxSlippage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2683,
                        "src": "72860:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2679,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72860:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72859:24:0"
                  },
                  "returnParameters": {
                    "id": 2682,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72892:0:0"
                  },
                  "scope": 2870,
                  "src": "72832:61:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2684,
                    "nodeType": "StructuredDocumentation",
                    "src": "72899:211:0",
                    "text": "@dev   Sets the Global Admin. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalAdminSet` event. \n@param newGlobalAdmin The new global admin address."
                  },
                  "functionSelector": "c52bc31d",
                  "id": 2689,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGlobalAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2687,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2686,
                        "mutability": "mutable",
                        "name": "newGlobalAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2689,
                        "src": "73139:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2685,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "73139:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73138:24:0"
                  },
                  "returnParameters": {
                    "id": 2688,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "73171:0:0"
                  },
                  "scope": 2870,
                  "src": "73115:57:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2690,
                    "nodeType": "StructuredDocumentation",
                    "src": "73178:314:0",
                    "text": "@dev   Sets the validity of a Balancer Pool. \n@dev   Only the Governor can call this function. \n@dev   It emits a `BalancerPoolSet` event. \n@param balancerPool The address of Balancer Pool contract.\n@param valid        The new validity status of a Balancer Pool."
                  },
                  "functionSelector": "490dae64",
                  "id": 2697,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidBalancerPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2695,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2692,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2697,
                        "src": "73527:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2691,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "73527:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2694,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2697,
                        "src": "73549:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2693,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "73549:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73526:34:0"
                  },
                  "returnParameters": {
                    "id": 2696,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "73569:0:0"
                  },
                  "scope": 2870,
                  "src": "73497:73:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2698,
                    "nodeType": "StructuredDocumentation",
                    "src": "73576:290:0",
                    "text": "@dev   Sets the paused/unpaused state of the protocol. \n@dev   Only the Global Admin can call this function. \n@dev   It emits a `ProtocolPaused` event. \n@param pause A boolean flag to switch externally facing functionality in the protocol on/off."
                  },
                  "functionSelector": "4e989118",
                  "id": 2703,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setProtocolPause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2701,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2700,
                        "mutability": "mutable",
                        "name": "pause",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2703,
                        "src": "73897:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2699,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "73897:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73896:12:0"
                  },
                  "returnParameters": {
                    "id": 2702,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "73917:0:0"
                  },
                  "scope": 2870,
                  "src": "73871:47:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2704,
                    "nodeType": "StructuredDocumentation",
                    "src": "73924:247:0",
                    "text": "@dev   Sets the validity of a PoolFactory. \n@dev   Only the Governor can call this function. \n@param poolFactory The address of a PoolFactory.\n@param valid       The new validity status of `poolFactory`."
                  },
                  "functionSelector": "6597b899",
                  "id": 2711,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidPoolFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2709,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2706,
                        "mutability": "mutable",
                        "name": "poolFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2711,
                        "src": "74205:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2705,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "74205:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2708,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2711,
                        "src": "74226:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2707,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "74226:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "74204:33:0"
                  },
                  "returnParameters": {
                    "id": 2710,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "74246:0:0"
                  },
                  "scope": 2870,
                  "src": "74176:71:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2712,
                    "nodeType": "StructuredDocumentation",
                    "src": "74253:247:0",
                    "text": "@dev   Sets the validity of a LoanFactory. \n@dev   Only the Governor can call this function. \n@param loanFactory The address of a LoanFactory.\n@param valid       The new validity status of `loanFactory`."
                  },
                  "functionSelector": "c9c67240",
                  "id": 2719,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidLoanFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2717,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2714,
                        "mutability": "mutable",
                        "name": "loanFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2719,
                        "src": "74534:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2713,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "74534:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2716,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2719,
                        "src": "74555:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2715,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "74555:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "74533:33:0"
                  },
                  "returnParameters": {
                    "id": 2718,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "74575:0:0"
                  },
                  "scope": 2870,
                  "src": "74505:71:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2720,
                    "nodeType": "StructuredDocumentation",
                    "src": "74582:428:0",
                    "text": "@dev   Sets the validity of `subFactory` as it relates to `superFactory`. \n@dev   Only the Governor can call this function. \n@param superFactory The core factory (e.g. PoolFactory, LoanFactory).\n@param subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n@param valid        The new validity status of `subFactory` within context of `superFactory`."
                  },
                  "functionSelector": "f85ee6f8",
                  "id": 2729,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidSubFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2727,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2722,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2729,
                        "src": "75043:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2721,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75043:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2724,
                        "mutability": "mutable",
                        "name": "subFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2729,
                        "src": "75065:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2723,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75065:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2726,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2729,
                        "src": "75085:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2725,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "75085:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "75042:54:0"
                  },
                  "returnParameters": {
                    "id": 2728,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "75105:0:0"
                  },
                  "scope": 2870,
                  "src": "75015:91:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2730,
                    "nodeType": "StructuredDocumentation",
                    "src": "75112:472:0",
                    "text": "@dev   Sets the path to swap an asset through Uniswap. \n@dev   Only the Governor can call this function. \n@dev   Set to == mid to enable a bilateral swap (single path swap). \n@dev   Set to != mid to enable a triangular swap (multi path swap). \n@param from The address of the asset being swapped.\n@param to   The address of the final asset to receive.\n@param mid  The intermediary asset for swaps, if any."
                  },
                  "functionSelector": "f3897663",
                  "id": 2739,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setDefaultUniswapPath",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2737,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2732,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2739,
                        "src": "75620:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2731,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75620:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2734,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2739,
                        "src": "75634:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2733,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75634:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2736,
                        "mutability": "mutable",
                        "name": "mid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2739,
                        "src": "75646:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2735,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75646:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "75619:39:0"
                  },
                  "returnParameters": {
                    "id": 2738,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "75667:0:0"
                  },
                  "scope": 2870,
                  "src": "75589:79:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2740,
                    "nodeType": "StructuredDocumentation",
                    "src": "75674:346:0",
                    "text": "@dev   Sets the validity of a Pool Delegate (those allowed to create Pools). \n@dev   Only the Governor can call this function. \n@dev   It emits a `PoolDelegateSet` event. \n@param poolDelegate The address to manage permissions for.\n@param valid        The new validity status of a Pool Delegate."
                  },
                  "functionSelector": "efdb16fc",
                  "id": 2747,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolDelegateAllowlist",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2745,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2742,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2747,
                        "src": "76059:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2741,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "76059:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2744,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2747,
                        "src": "76081:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2743,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "76081:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "76058:34:0"
                  },
                  "returnParameters": {
                    "id": 2746,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "76101:0:0"
                  },
                  "scope": 2870,
                  "src": "76025:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2748,
                    "nodeType": "StructuredDocumentation",
                    "src": "76108:308:0",
                    "text": "@dev   Sets the validity of an asset for collateral. \n@dev   Only the Governor can call this function. \n@dev   It emits a `CollateralAssetSet` event. \n@param asset The asset to assign validity to.\n@param valid The new validity status of a Collateral Asset."
                  },
                  "functionSelector": "2fa6c88f",
                  "id": 2755,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setCollateralAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2753,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2750,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2755,
                        "src": "76449:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2749,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "76449:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2752,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2755,
                        "src": "76464:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2751,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "76464:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "76448:27:0"
                  },
                  "returnParameters": {
                    "id": 2754,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "76484:0:0"
                  },
                  "scope": 2870,
                  "src": "76421:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2756,
                    "nodeType": "StructuredDocumentation",
                    "src": "76491:320:0",
                    "text": "@dev   Sets the validity of an asset for liquidity in Pools. \n@dev   Only the Governor can call this function. \n@dev   It emits a `LiquidityAssetSet` event. \n@param asset The asset to assign validity to.\n@param valid The new validity status a Liquidity Asset in Pools."
                  },
                  "functionSelector": "2daa0d89",
                  "id": 2763,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLiquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2761,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2758,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2763,
                        "src": "76843:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2757,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "76843:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2760,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2763,
                        "src": "76858:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2759,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "76858:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "76842:27:0"
                  },
                  "returnParameters": {
                    "id": 2762,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "76878:0:0"
                  },
                  "scope": 2870,
                  "src": "76816:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2764,
                    "nodeType": "StructuredDocumentation",
                    "src": "76885:236:0",
                    "text": "@dev   Sets the validity of a calculator contract. \n@dev   Only the Governor can call this function. \n@param calc  The Calculator address.\n@param valid The new validity status of a Calculator."
                  },
                  "functionSelector": "be44ed6b",
                  "id": 2771,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2769,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2766,
                        "mutability": "mutable",
                        "name": "calc",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2771,
                        "src": "77143:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2765,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "77143:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2768,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2771,
                        "src": "77157:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2767,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "77157:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "77142:26:0"
                  },
                  "returnParameters": {
                    "id": 2770,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "77177:0:0"
                  },
                  "scope": 2870,
                  "src": "77126:52:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2772,
                    "nodeType": "StructuredDocumentation",
                    "src": "77184:225:0",
                    "text": "@dev   Sets the investor fee (in basis points). \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _fee The fee, e.g., 50 = 0.50%."
                  },
                  "functionSelector": "5e045467",
                  "id": 2777,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setInvestorFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2775,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2774,
                        "mutability": "mutable",
                        "name": "_fee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2777,
                        "src": "77438:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2773,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "77438:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "77437:14:0"
                  },
                  "returnParameters": {
                    "id": 2776,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "77460:0:0"
                  },
                  "scope": 2870,
                  "src": "77414:47:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2778,
                    "nodeType": "StructuredDocumentation",
                    "src": "77467:225:0",
                    "text": "@dev   Sets the treasury fee (in basis points). \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _fee The fee, e.g., 50 = 0.50%."
                  },
                  "functionSelector": "77e741c7",
                  "id": 2783,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setTreasuryFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2781,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2780,
                        "mutability": "mutable",
                        "name": "_fee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2783,
                        "src": "77721:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2779,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "77721:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "77720:14:0"
                  },
                  "returnParameters": {
                    "id": 2782,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "77743:0:0"
                  },
                  "scope": 2870,
                  "src": "77697:47:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2784,
                    "nodeType": "StructuredDocumentation",
                    "src": "77750:220:0",
                    "text": "@dev   Sets the MapleTreasury. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _mapleTreasury A new MapleTreasury address."
                  },
                  "functionSelector": "7303de25",
                  "id": 2789,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMapleTreasury",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2787,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2786,
                        "mutability": "mutable",
                        "name": "_mapleTreasury",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2789,
                        "src": "78001:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2785,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "78001:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "78000:24:0"
                  },
                  "returnParameters": {
                    "id": 2788,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "78033:0:0"
                  },
                  "scope": 2870,
                  "src": "77975:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2790,
                    "nodeType": "StructuredDocumentation",
                    "src": "78040:257:0",
                    "text": "@dev   Sets the default grace period. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _defaultGracePeriod The new number of seconds to set the grace period to."
                  },
                  "functionSelector": "44c14f71",
                  "id": 2795,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setDefaultGracePeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2793,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2792,
                        "mutability": "mutable",
                        "name": "_defaultGracePeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2795,
                        "src": "78333:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2791,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "78333:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "78332:29:0"
                  },
                  "returnParameters": {
                    "id": 2794,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "78370:0:0"
                  },
                  "scope": 2870,
                  "src": "78302:69:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2796,
                    "nodeType": "StructuredDocumentation",
                    "src": "78377:285:0",
                    "text": "@dev   Sets the minimum Loan equity. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _minLoanEquity The new minimum percentage of Loan equity an account must have to trigger liquidations."
                  },
                  "functionSelector": "298b795d",
                  "id": 2801,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMinLoanEquity",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2799,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2798,
                        "mutability": "mutable",
                        "name": "_minLoanEquity",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2801,
                        "src": "78693:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2797,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "78693:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "78692:24:0"
                  },
                  "returnParameters": {
                    "id": 2800,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "78725:0:0"
                  },
                  "scope": 2870,
                  "src": "78667:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2802,
                    "nodeType": "StructuredDocumentation",
                    "src": "78732:251:0",
                    "text": "@dev   Sets the funding period. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _fundingPeriod The number of seconds to set the drawdown grace period to."
                  },
                  "functionSelector": "2a5aa292",
                  "id": 2807,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setFundingPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2805,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2804,
                        "mutability": "mutable",
                        "name": "_fundingPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2807,
                        "src": "79014:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2803,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "79014:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "79013:24:0"
                  },
                  "returnParameters": {
                    "id": 2806,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "79046:0:0"
                  },
                  "scope": 2870,
                  "src": "78988:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2808,
                    "nodeType": "StructuredDocumentation",
                    "src": "79053:252:0",
                    "text": "@dev   Sets the the minimum Pool cover required to finalize a Pool. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param amt The new minimum swap out required."
                  },
                  "functionSelector": "dbc6c552",
                  "id": 2813,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setSwapOutRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2811,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2810,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2813,
                        "src": "79338:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2809,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "79338:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "79337:13:0"
                  },
                  "returnParameters": {
                    "id": 2812,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "79359:0:0"
                  },
                  "scope": 2870,
                  "src": "79310:50:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2814,
                    "nodeType": "StructuredDocumentation",
                    "src": "79366:282:0",
                    "text": "@dev   Sets a price feed's oracle. \n@dev   Only the Governor can call this function. \n@dev   It emits a `OracleSet` event. \n@param asset  The asset to update price for.\n@param oracle The new Oracle to use for the price of `asset`."
                  },
                  "functionSelector": "67a74ddc",
                  "id": 2821,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPriceOracle",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2819,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2816,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2821,
                        "src": "79677:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2815,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "79677:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2818,
                        "mutability": "mutable",
                        "name": "oracle",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2821,
                        "src": "79692:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2817,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "79692:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "79676:31:0"
                  },
                  "returnParameters": {
                    "id": 2820,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "79716:0:0"
                  },
                  "scope": 2870,
                  "src": "79653:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2822,
                    "nodeType": "StructuredDocumentation",
                    "src": "79723:305:0",
                    "text": "@dev   Sets a new Pending Governor. \n@dev   This address can become Governor if they accept. \n@dev   Only the Governor can call this function. \n@dev   It emits a `PendingGovernorSet` event. \n@param _pendingGovernor The address of a new Pending Governor."
                  },
                  "functionSelector": "f235757f",
                  "id": 2827,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPendingGovernor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2825,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2824,
                        "mutability": "mutable",
                        "name": "_pendingGovernor",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2827,
                        "src": "80061:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2823,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "80061:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "80060:26:0"
                  },
                  "returnParameters": {
                    "id": 2826,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80095:0:0"
                  },
                  "scope": 2870,
                  "src": "80033:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2828,
                    "nodeType": "StructuredDocumentation",
                    "src": "80102:170:0",
                    "text": "@dev Accept the Governor position. \n@dev Only the Pending Governor can call this function. \n@dev It emits a `GovernorAccepted` event. "
                  },
                  "functionSelector": "e58bb639",
                  "id": 2831,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "acceptGovernor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2829,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80300:2:0"
                  },
                  "returnParameters": {
                    "id": 2830,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80311:0:0"
                  },
                  "scope": 2870,
                  "src": "80277:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2832,
                    "nodeType": "StructuredDocumentation",
                    "src": "80318:171:0",
                    "text": "@dev    Fetch price for asset from Chainlink oracles.\n@param  asset The asset to fetch the price of.\n@return The price of asset in USD."
                  },
                  "functionSelector": "16345f18",
                  "id": 2839,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLatestPrice",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2835,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2834,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2839,
                        "src": "80518:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2833,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "80518:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "80517:15:0"
                  },
                  "returnParameters": {
                    "id": 2838,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2837,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2839,
                        "src": "80556:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2836,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "80556:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "80555:9:0"
                  },
                  "scope": 2870,
                  "src": "80494:71:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2840,
                    "nodeType": "StructuredDocumentation",
                    "src": "80571:641:0",
                    "text": "@dev   Checks that a `subFactory` is valid as it relates to `superFactory`.\n@param superFactory The core factory (e.g. PoolFactory, LoanFactory).\n@param subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n@param factoryType  The type expected for the subFactory. \n0 = COLLATERAL_LOCKER_FACTORY, \n1 = DEBT_LOCKER_FACTORY, \n2 = FUNDING_LOCKER_FACTORY, \n3 = LIQUIDITY_LOCKER_FACTORY, \n4 = STAKE_LOCKER_FACTORY. "
                  },
                  "functionSelector": "13d459fb",
                  "id": 2851,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidSubFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2847,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2842,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2851,
                        "src": "81244:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2841,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "81244:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2844,
                        "mutability": "mutable",
                        "name": "subFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2851,
                        "src": "81266:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2843,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "81266:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2846,
                        "mutability": "mutable",
                        "name": "factoryType",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2851,
                        "src": "81286:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2845,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "81286:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81243:61:0"
                  },
                  "returnParameters": {
                    "id": 2850,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2849,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2851,
                        "src": "81328:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2848,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "81328:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81327:6:0"
                  },
                  "scope": 2870,
                  "src": "81217:117:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2852,
                    "nodeType": "StructuredDocumentation",
                    "src": "81340:154:0",
                    "text": "@dev   Checks that a Calculator is valid.\n@param calc     The Calculator address.\n@param calcType The Calculator type."
                  },
                  "functionSelector": "1b5833f7",
                  "id": 2861,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2857,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2854,
                        "mutability": "mutable",
                        "name": "calc",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2861,
                        "src": "81520:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2853,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "81520:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2856,
                        "mutability": "mutable",
                        "name": "calcType",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2861,
                        "src": "81534:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2855,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "81534:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81519:30:0"
                  },
                  "returnParameters": {
                    "id": 2860,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2859,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2861,
                        "src": "81573:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2858,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "81573:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81572:6:0"
                  },
                  "scope": 2870,
                  "src": "81499:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2862,
                    "nodeType": "StructuredDocumentation",
                    "src": "81585:208:0",
                    "text": "@dev    Returns the `lpCooldownPeriod` and `lpWithdrawWindow` as a tuple, for convenience.\n@return The value of `lpCooldownPeriod`.\n@return The value of `lpWithdrawWindow`."
                  },
                  "functionSelector": "9f51290b",
                  "id": 2869,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLpCooldownParams",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2863,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "81826:2:0"
                  },
                  "returnParameters": {
                    "id": 2868,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2865,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2869,
                        "src": "81852:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2864,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "81852:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2867,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2869,
                        "src": "81861:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2866,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "81861:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81851:18:0"
                  },
                  "scope": 2870,
                  "src": "81798:72:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "61227:20646:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2871,
                "nodeType": "StructuredDocumentation",
                "src": "82088:85:0",
                "text": "@title LiquidityLocker holds custody of Liquidity Asset tokens for a given Pool."
              },
              "fullyImplemented": false,
              "id": 2902,
              "linearizedBaseContracts": [
                2902
              ],
              "name": "ILiquidityLocker",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 2872,
                    "nodeType": "StructuredDocumentation",
                    "src": "82207:82:0",
                    "text": "@dev The Pool contract address that owns this LiquidityLocker."
                  },
                  "functionSelector": "16f0115b",
                  "id": 2877,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2873,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "82307:2:0"
                  },
                  "returnParameters": {
                    "id": 2876,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2875,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2877,
                        "src": "82333:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2874,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "82333:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "82332:9:0"
                  },
                  "scope": 2902,
                  "src": "82294:48:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2878,
                    "nodeType": "StructuredDocumentation",
                    "src": "82348:84:0",
                    "text": "@dev The Liquidity Asset which this LiquidityLocker will escrow."
                  },
                  "functionSelector": "209b2bca",
                  "id": 2883,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2879,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "82460:2:0"
                  },
                  "returnParameters": {
                    "id": 2882,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2881,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2883,
                        "src": "82486:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 2880,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "82486:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "82485:8:0"
                  },
                  "scope": 2902,
                  "src": "82437:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2884,
                    "nodeType": "StructuredDocumentation",
                    "src": "82500:272:0",
                    "text": "@dev   Transfers amount of Liquidity Asset to a destination account. \n@dev   Only the Pool can call this function. \n@param dst The destination to transfer Liquidity Asset to.\n@param amt The amount of Liquidity Asset to transfer."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 2891,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2889,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2886,
                        "mutability": "mutable",
                        "name": "dst",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2891,
                        "src": "82795:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2885,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "82795:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2888,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2891,
                        "src": "82808:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2887,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "82808:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "82794:26:0"
                  },
                  "returnParameters": {
                    "id": 2890,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "82829:0:0"
                  },
                  "scope": 2902,
                  "src": "82777:53:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2892,
                    "nodeType": "StructuredDocumentation",
                    "src": "82836:335:0",
                    "text": "@dev   Funds a Loan using available assets in this LiquidityLocker. \n@dev   Only the Pool can call this function. \n@param loan       The Loan to fund.\n@param debtLocker The DebtLocker that will escrow debt tokens.\n@param amount     The amount of Liquidity Asset to fund the Loan for."
                  },
                  "functionSelector": "1aa37cec",
                  "id": 2901,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2899,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2894,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2901,
                        "src": "83194:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2893,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83194:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2896,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2901,
                        "src": "83208:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2895,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83208:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2898,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2901,
                        "src": "83228:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2897,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "83228:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "83193:50:0"
                  },
                  "returnParameters": {
                    "id": 2900,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "83252:0:0"
                  },
                  "scope": 2902,
                  "src": "83176:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "82173:1083:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 2904,
                    "name": "ISubFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 596,
                    "src": "83561:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISubFactory_$596",
                      "typeString": "contract ISubFactory"
                    }
                  },
                  "id": 2905,
                  "nodeType": "InheritanceSpecifier",
                  "src": "83561:11:0"
                }
              ],
              "contractDependencies": [
                596
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 2903,
                "nodeType": "StructuredDocumentation",
                "src": "83459:65:0",
                "text": "@title LiquidityLockerFactory instantiates LiquidityLockers."
              },
              "fullyImplemented": false,
              "id": 2946,
              "linearizedBaseContracts": [
                2946,
                596
              ],
              "name": "ILiquidityLockerFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2906,
                    "nodeType": "StructuredDocumentation",
                    "src": "83580:290:0",
                    "text": "@dev   Emits an event indicating a LiquidityLocker was created.\n@param owner           The owner of the LiquidityLocker.\n@param liquidityLocker The address of the LiquidityLocker.\n@param liquidityAsset  The Liquidity Asset of the LiquidityLocker."
                  },
                  "id": 2914,
                  "name": "LiquidityLockerCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2913,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2908,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2914,
                        "src": "83904:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2907,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83904:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2910,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2914,
                        "src": "83927:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2909,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83927:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2912,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2914,
                        "src": "83952:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2911,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83952:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "83903:72:0"
                  },
                  "src": "83875:101:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2915,
                    "nodeType": "StructuredDocumentation",
                    "src": "83982:159:0",
                    "text": "@param  liquidityLocker The address of a LiquidityLocker.\n@return The address of the owner of LiquidityLocker at `liquidityLocker`."
                  },
                  "functionSelector": "666e1b39",
                  "id": 2922,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2918,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2917,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2922,
                        "src": "84161:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2916,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84161:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84160:25:0"
                  },
                  "returnParameters": {
                    "id": 2921,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2920,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2922,
                        "src": "84209:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2919,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84209:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84208:9:0"
                  },
                  "scope": 2946,
                  "src": "84146:72:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2923,
                    "nodeType": "StructuredDocumentation",
                    "src": "84224:159:0",
                    "text": "@param  liquidityLocker The address of a LiquidityLocker.\n@return The address of the owner of LiquidityLocker at `liquidityLocker`."
                  },
                  "functionSelector": "2ec63d7c",
                  "id": 2930,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2926,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2925,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2930,
                        "src": "84406:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2924,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84406:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84405:25:0"
                  },
                  "returnParameters": {
                    "id": 2929,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2928,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2930,
                        "src": "84454:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2927,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "84454:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84453:6:0"
                  },
                  "scope": 2946,
                  "src": "84388:72:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    595
                  ],
                  "body": null,
                  "documentation": {
                    "id": 2931,
                    "nodeType": "StructuredDocumentation",
                    "src": "84466:93:0",
                    "text": "@dev The type of the factory (i.e FactoryType::LIQUIDITY_LOCKER_FACTORY)."
                  },
                  "functionSelector": "64e1fd55",
                  "id": 2937,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryType",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2933,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "84596:8:0"
                  },
                  "parameters": {
                    "id": 2932,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "84584:2:0"
                  },
                  "returnParameters": {
                    "id": 2936,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2935,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2937,
                        "src": "84619:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2934,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "84619:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84618:7:0"
                  },
                  "scope": 2946,
                  "src": "84564:62:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2938,
                    "nodeType": "StructuredDocumentation",
                    "src": "84632:294:0",
                    "text": "@dev    Instantiates a LiquidityLocker contract.\n@dev    It emits a `LiquidityLockerCreated` event.\n@param  liquidityAsset  The Liquidity Asset this LiquidityLocker will escrow.\n@return liquidityLocker The address of the instantiated LiquidityLocker."
                  },
                  "functionSelector": "19eb783a",
                  "id": 2945,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "newLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2941,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2940,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2945,
                        "src": "84950:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2939,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84950:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84949:24:0"
                  },
                  "returnParameters": {
                    "id": 2944,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2943,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2945,
                        "src": "84992:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2942,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84992:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84991:25:0"
                  },
                  "scope": 2946,
                  "src": "84931:86:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "83524:1496:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2947,
                "nodeType": "StructuredDocumentation",
                "src": "85200:43:0",
                "text": "@title LoanFactory instantiates Loans."
              },
              "fullyImplemented": false,
              "id": 3092,
              "linearizedBaseContracts": [
                3092
              ],
              "name": "ILoanFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2948,
                    "nodeType": "StructuredDocumentation",
                    "src": "85273:253:0",
                    "text": "@dev   Emits an event indicating a LoanFactoryAdmin was allowed.\n@param loanFactoryAdmin The address of a LoanFactoryAdmin.\n@param allowed          Whether `loanFactoryAdmin` is allowed as an admin of the LoanFactory."
                  },
                  "id": 2954,
                  "name": "LoanFactoryAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2953,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2950,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loanFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2954,
                        "src": "85557:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2949,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "85557:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2952,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2954,
                        "src": "85591:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2951,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "85591:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "85556:48:0"
                  },
                  "src": "85531:74:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2955,
                    "nodeType": "StructuredDocumentation",
                    "src": "85611:1176:0",
                    "text": "@dev   Emits an event indicating a Loan was created.\n@param loan             The address of the Loan.\n@param borrower         The Borrower.\n@param liquidityAsset   The asset the Loan will raise funding in.\n@param collateralAsset  The asset the Loan will use as collateral.\n@param collateralLocker The address of the Collateral Locker.\n@param fundingLocker    The address of the Funding Locker.\n@param specs            The specifications for the Loan. \n[0] => apr, \n[1] => termDays, \n[2] => paymentIntervalDays, \n[3] => requestAmount, \n[4] => collateralRatio. \n@param calcs            The calculators used for the Loan. \n[0] => repaymentCalc, \n[1] => lateFeeCalc, \n[2] => premiumCalc. \n@param name             The name of the Loan FDTs.\n@param symbol           The symbol of the Loan FDTs."
                  },
                  "id": 2981,
                  "name": "LoanCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2980,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2957,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86819:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2956,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86819:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2959,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "borrower",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86841:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2958,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86841:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2961,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86875:30:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2960,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86875:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2963,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "collateralAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86915:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2962,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86915:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2965,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "collateralLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86948:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2964,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86948:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2967,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "fundingLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86982:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2966,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86982:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2971,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "specs",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "87013:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$5_memory_ptr",
                          "typeString": "uint256[5]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2968,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "87013:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2970,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "35",
                            "id": 2969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "87021:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_5_by_1",
                              "typeString": "int_const 5"
                            },
                            "value": "5"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "87013:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$5_storage_ptr",
                            "typeString": "uint256[5]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2975,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "calcs",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "87039:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$3_memory_ptr",
                          "typeString": "address[3]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2972,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "87039:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2974,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "33",
                            "id": 2973,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "87047:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3_by_1",
                              "typeString": "int_const 3"
                            },
                            "value": "3"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "87039:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$3_storage_ptr",
                            "typeString": "address[3]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2977,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "87065:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2976,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "87065:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2979,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "87086:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2978,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "87086:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "86809:296:0"
                  },
                  "src": "86792:314:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2982,
                    "nodeType": "StructuredDocumentation",
                    "src": "87112:71:0",
                    "text": "@dev The Factory type of `CollateralLockerFactory`."
                  },
                  "functionSelector": "e70dd6cf",
                  "id": 2987,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "CL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2983,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87207:2:0"
                  },
                  "returnParameters": {
                    "id": 2986,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2985,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2987,
                        "src": "87233:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2984,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87233:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87232:7:0"
                  },
                  "scope": 3092,
                  "src": "87188:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2988,
                    "nodeType": "StructuredDocumentation",
                    "src": "87246:68:0",
                    "text": "@dev The Factory type of `FundingLockerFactory`."
                  },
                  "functionSelector": "38505fb0",
                  "id": 2993,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "FL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2989,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87338:2:0"
                  },
                  "returnParameters": {
                    "id": 2992,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2991,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2993,
                        "src": "87364:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2990,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87364:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87363:7:0"
                  },
                  "scope": 3092,
                  "src": "87319:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2994,
                    "nodeType": "StructuredDocumentation",
                    "src": "87377:58:0",
                    "text": "@dev The Calc type of `RepaymentCalc`."
                  },
                  "functionSelector": "8c38922f",
                  "id": 2999,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "INTEREST_CALC_TYPE",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2995,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87467:2:0"
                  },
                  "returnParameters": {
                    "id": 2998,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2997,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2999,
                        "src": "87493:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2996,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87493:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87492:7:0"
                  },
                  "scope": 3092,
                  "src": "87440:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3000,
                    "nodeType": "StructuredDocumentation",
                    "src": "87506:56:0",
                    "text": "@dev The Calc type of `LateFeeCalc`."
                  },
                  "functionSelector": "3493f4ca",
                  "id": 3005,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "LATEFEE_CALC_TYPE",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3001,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87593:2:0"
                  },
                  "returnParameters": {
                    "id": 3004,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3003,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3005,
                        "src": "87619:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3002,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87619:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87618:7:0"
                  },
                  "scope": 3092,
                  "src": "87567:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3006,
                    "nodeType": "StructuredDocumentation",
                    "src": "87632:56:0",
                    "text": "@dev The Calc type of `PremiumCalc`."
                  },
                  "functionSelector": "7a8fe3c0",
                  "id": 3011,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "PREMIUM_CALC_TYPE",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3007,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87719:2:0"
                  },
                  "returnParameters": {
                    "id": 3010,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3009,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3011,
                        "src": "87745:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3008,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87745:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87744:7:0"
                  },
                  "scope": 3092,
                  "src": "87693:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3012,
                    "nodeType": "StructuredDocumentation",
                    "src": "87758:58:0",
                    "text": "@dev The instance of the MapleGlobals."
                  },
                  "functionSelector": "c3124525",
                  "id": 3017,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "globals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3013,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87837:2:0"
                  },
                  "returnParameters": {
                    "id": 3016,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3015,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3017,
                        "src": "87863:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3014,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "87863:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87862:15:0"
                  },
                  "scope": 3092,
                  "src": "87821:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3018,
                    "nodeType": "StructuredDocumentation",
                    "src": "87884:69:0",
                    "text": "@dev The incrementor for number of Loans created."
                  },
                  "functionSelector": "ee9b75b5",
                  "id": 3023,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loansCreated",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3019,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87979:2:0"
                  },
                  "returnParameters": {
                    "id": 3022,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3021,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3023,
                        "src": "88005:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3020,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "88005:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88004:9:0"
                  },
                  "scope": 3092,
                  "src": "87958:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3024,
                    "nodeType": "StructuredDocumentation",
                    "src": "88020:106:0",
                    "text": "@param  index The index of a Loan.\n@return The address of the Loan at `index`."
                  },
                  "functionSelector": "e1ec3c68",
                  "id": 3031,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loans",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3027,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3026,
                        "mutability": "mutable",
                        "name": "index",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3031,
                        "src": "88146:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3025,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "88146:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88145:15:0"
                  },
                  "returnParameters": {
                    "id": 3030,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3029,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3031,
                        "src": "88184:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3028,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "88184:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88183:9:0"
                  },
                  "scope": 3092,
                  "src": "88131:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3032,
                    "nodeType": "StructuredDocumentation",
                    "src": "88199:97:0",
                    "text": "@param  loan The address of a Loan.\n@return Whether `loan` is a Loan."
                  },
                  "functionSelector": "2819cbc2",
                  "id": 3039,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3035,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3034,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3039,
                        "src": "88317:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3033,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "88317:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88316:14:0"
                  },
                  "returnParameters": {
                    "id": 3038,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3037,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3039,
                        "src": "88354:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3036,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "88354:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88353:6:0"
                  },
                  "scope": 3092,
                  "src": "88301:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3040,
                    "nodeType": "StructuredDocumentation",
                    "src": "88366:172:0",
                    "text": "@param  admin The address of a LoanFactoryAdmin.\n@return Whether `admin` has permission to do certain operations in case of disaster management."
                  },
                  "functionSelector": "a620e0ac",
                  "id": 3047,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loanFactoryAdmins",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3043,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3042,
                        "mutability": "mutable",
                        "name": "admin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3047,
                        "src": "88570:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3041,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "88570:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88569:15:0"
                  },
                  "returnParameters": {
                    "id": 3046,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3045,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3047,
                        "src": "88608:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3044,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "88608:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88607:6:0"
                  },
                  "scope": 3092,
                  "src": "88543:71:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3048,
                    "nodeType": "StructuredDocumentation",
                    "src": "88620:159:0",
                    "text": "@dev   Sets MapleGlobals. \n@dev   Only the Governor can call this function. \n@param newGlobals Address of new MapleGlobals."
                  },
                  "functionSelector": "cc2e0a26",
                  "id": 3053,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGlobals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3051,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3050,
                        "mutability": "mutable",
                        "name": "newGlobals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3053,
                        "src": "88804:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3049,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "88804:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88803:20:0"
                  },
                  "returnParameters": {
                    "id": 3052,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "88832:0:0"
                  },
                  "scope": 3092,
                  "src": "88784:49:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3054,
                    "nodeType": "StructuredDocumentation",
                    "src": "88839:1071:0",
                    "text": "@dev    Create a new Loan. \n@dev    It emits a `LoanCreated` event. \n@param  liquidityAsset  The asset the Loan will raise funding in.\n@param  collateralAsset The asset the Loan will use as collateral.\n@param  flFactory       The factory to instantiate a FundingLocker from.\n@param  clFactory       The factory to instantiate a CollateralLocker from.\n@param  specs           The specifications for the Loan. \n[0] => apr, \n[1] => termDays, \n[2] => paymentIntervalDays, \n[3] => requestAmount, \n[4] => collateralRatio. \n@param  calcs           The calculators used for the Loan. \n[0] => repaymentCalc, \n[1] => lateFeeCalc, \n[2] => premiumCalc. \n@return loanAddress     Address of the instantiated Loan."
                  },
                  "functionSelector": "d5ab2074",
                  "id": 3075,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3071,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3056,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "89944:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3055,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "89944:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3058,
                        "mutability": "mutable",
                        "name": "collateralAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "89976:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3057,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "89976:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3060,
                        "mutability": "mutable",
                        "name": "flFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "90009:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3059,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "90009:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3062,
                        "mutability": "mutable",
                        "name": "clFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "90036:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3061,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "90036:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3066,
                        "mutability": "mutable",
                        "name": "specs",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "90063:23:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$5_memory_ptr",
                          "typeString": "uint256[5]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3063,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "90063:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3065,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "35",
                            "id": 3064,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "90071:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_5_by_1",
                              "typeString": "int_const 5"
                            },
                            "value": "5"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "90063:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$5_storage_ptr",
                            "typeString": "uint256[5]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3070,
                        "mutability": "mutable",
                        "name": "calcs",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "90096:23:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$3_memory_ptr",
                          "typeString": "address[3]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3067,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "90096:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3069,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "33",
                            "id": 3068,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "90104:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3_by_1",
                              "typeString": "int_const 3"
                            },
                            "value": "3"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "90096:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$3_storage_ptr",
                            "typeString": "address[3]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "89934:191:0"
                  },
                  "returnParameters": {
                    "id": 3074,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3073,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "90144:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3072,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "90144:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "90143:9:0"
                  },
                  "scope": 3092,
                  "src": "89915:238:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3076,
                    "nodeType": "StructuredDocumentation",
                    "src": "90159:322:0",
                    "text": "@dev   Sets a LoanFactory Admin. Only the Governor can call this function.\n@dev   It emits a `LoanFactoryAdminSet` event.\n@param loanFactoryAdmin An address being allowed or disallowed as a LoanFactory Admin.\n@param allowed          The status of `loanFactoryAdmin` as an Admin."
                  },
                  "functionSelector": "2cd0aca0",
                  "id": 3083,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLoanFactoryAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3081,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3078,
                        "mutability": "mutable",
                        "name": "loanFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3083,
                        "src": "90515:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3077,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "90515:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3080,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3083,
                        "src": "90541:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3079,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "90541:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "90514:40:0"
                  },
                  "returnParameters": {
                    "id": 3082,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90563:0:0"
                  },
                  "scope": 3092,
                  "src": "90486:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3084,
                    "nodeType": "StructuredDocumentation",
                    "src": "90570:183:0",
                    "text": "@dev Triggers paused state. \n@dev Halts functionality for certain functions. \n@dev Only the Governor or a LoanFactory Admin can call this function."
                  },
                  "functionSelector": "8456cb59",
                  "id": 3087,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3085,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90772:2:0"
                  },
                  "returnParameters": {
                    "id": 3086,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90783:0:0"
                  },
                  "scope": 3092,
                  "src": "90758:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3088,
                    "nodeType": "StructuredDocumentation",
                    "src": "90790:188:0",
                    "text": "@dev Triggers unpaused state. \n@dev Restores functionality for certain functions. \n@dev Only the Governor or a LoanFactory Admin can call this function."
                  },
                  "functionSelector": "3f4ba83a",
                  "id": 3091,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3089,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90999:2:0"
                  },
                  "returnParameters": {
                    "id": 3090,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91010:0:0"
                  },
                  "scope": 3092,
                  "src": "90983:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "85243:5771:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3094,
                    "name": "IExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2006,
                    "src": "91322:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExtendedFDT_$2006",
                      "typeString": "contract IExtendedFDT"
                    }
                  },
                  "id": 3095,
                  "nodeType": "InheritanceSpecifier",
                  "src": "91322:12:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                2006
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 3093,
                "nodeType": "StructuredDocumentation",
                "src": "91205:95:0",
                "text": "@title PoolFDT inherits ExtendedFDT and accounts for gains/losses for Liquidity Providers."
              },
              "fullyImplemented": false,
              "id": 3120,
              "linearizedBaseContracts": [
                3120,
                2006,
                141,
                77
              ],
              "name": "IPoolFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 3096,
                    "nodeType": "StructuredDocumentation",
                    "src": "91342:62:0",
                    "text": "@dev The sum of all withdrawable interest."
                  },
                  "functionSelector": "71073bac",
                  "id": 3101,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "interestSum",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3097,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91429:2:0"
                  },
                  "returnParameters": {
                    "id": 3100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3099,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3101,
                        "src": "91455:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3098,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "91455:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "91454:9:0"
                  },
                  "scope": 3120,
                  "src": "91409:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3102,
                    "nodeType": "StructuredDocumentation",
                    "src": "91470:60:0",
                    "text": "@dev The sum of all unrecognized losses."
                  },
                  "functionSelector": "a33142f7",
                  "id": 3107,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3103,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91554:2:0"
                  },
                  "returnParameters": {
                    "id": 3106,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3105,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3107,
                        "src": "91580:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3104,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "91580:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "91579:9:0"
                  },
                  "scope": 3120,
                  "src": "91535:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3108,
                    "nodeType": "StructuredDocumentation",
                    "src": "91595:98:0",
                    "text": "@dev The amount of earned interest present and accounted for in this contract."
                  },
                  "functionSelector": "9f3c7325",
                  "id": 3113,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "interestBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3109,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91722:2:0"
                  },
                  "returnParameters": {
                    "id": 3112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3111,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3113,
                        "src": "91748:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3110,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "91748:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "91747:9:0"
                  },
                  "scope": 3120,
                  "src": "91698:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3114,
                    "nodeType": "StructuredDocumentation",
                    "src": "91763:89:0",
                    "text": "@dev The amount of losses present and accounted for in this contract."
                  },
                  "functionSelector": "fec984e3",
                  "id": 3119,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3115,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91879:2:0"
                  },
                  "returnParameters": {
                    "id": 3118,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3117,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3119,
                        "src": "91905:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3116,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "91905:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "91904:9:0"
                  },
                  "scope": 3120,
                  "src": "91857:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "91300:617:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3122,
                    "name": "IPoolFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3120,
                    "src": "92275:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolFDT_$3120",
                      "typeString": "contract IPoolFDT"
                    }
                  },
                  "id": 3123,
                  "nodeType": "InheritanceSpecifier",
                  "src": "92275:8:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3124,
                    "name": "ExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2379,
                    "src": "92285:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ExtendedFDT_$2379",
                      "typeString": "contract ExtendedFDT"
                    }
                  },
                  "id": 3125,
                  "nodeType": "InheritanceSpecifier",
                  "src": "92285:11:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1076,
                1574,
                1946,
                2006,
                2379,
                3120
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 3121,
                "nodeType": "StructuredDocumentation",
                "src": "92151:95:0",
                "text": "@title PoolFDT inherits ExtendedFDT and accounts for gains/losses for Liquidity Providers."
              },
              "fullyImplemented": true,
              "id": 3230,
              "linearizedBaseContracts": [
                3230,
                2379,
                1946,
                1574,
                3120,
                2006,
                141,
                77,
                1076
              ],
              "name": "PoolFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 3128,
                  "libraryName": {
                    "contractScope": null,
                    "id": 3126,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "92310:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "92304:33:0",
                  "typeName": {
                    "id": 3127,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "92329:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "baseFunctions": [
                    3101
                  ],
                  "constant": false,
                  "functionSelector": "71073bac",
                  "id": 3131,
                  "mutability": "mutable",
                  "name": "interestSum",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3130,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "92358:8:0"
                  },
                  "scope": 3230,
                  "src": "92343:35:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "92343:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3107
                  ],
                  "constant": false,
                  "functionSelector": "a33142f7",
                  "id": 3134,
                  "mutability": "mutable",
                  "name": "poolLosses",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3133,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "92399:8:0"
                  },
                  "scope": 3230,
                  "src": "92384:34:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3132,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "92384:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3113
                  ],
                  "constant": false,
                  "functionSelector": "9f3c7325",
                  "id": 3137,
                  "mutability": "mutable",
                  "name": "interestBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3136,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "92440:8:0"
                  },
                  "scope": 3230,
                  "src": "92425:39:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3135,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "92425:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3119
                  ],
                  "constant": false,
                  "functionSelector": "fec984e3",
                  "id": 3140,
                  "mutability": "mutable",
                  "name": "lossesBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3139,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "92485:8:0"
                  },
                  "scope": 3230,
                  "src": "92470:37:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "92470:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3151,
                    "nodeType": "Block",
                    "src": "92601:3:0",
                    "statements": []
                  },
                  "documentation": null,
                  "id": 3152,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3147,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3142,
                          "src": "92580:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3148,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3144,
                          "src": "92586:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 3149,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 3146,
                        "name": "ExtendedFDT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2379,
                        "src": "92568:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ExtendedFDT_$2379_$",
                          "typeString": "type(contract ExtendedFDT)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "92568:25:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3145,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3142,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3152,
                        "src": "92526:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3141,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "92526:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3144,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3152,
                        "src": "92546:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3143,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "92546:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "92525:42:0"
                  },
                  "returnParameters": {
                    "id": 3150,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "92601:0:0"
                  },
                  "scope": 3230,
                  "src": "92514:90:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2371
                  ],
                  "body": {
                    "id": 3174,
                    "nodeType": "Block",
                    "src": "92743:129:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3159,
                            "name": "losses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3157,
                            "src": "92753:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3160,
                              "name": "_prepareLossesWithdraw",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2130,
                              "src": "92762:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                "typeString": "function () returns (uint256)"
                              }
                            },
                            "id": 3161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "92762:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "92753:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3163,
                        "nodeType": "ExpressionStatement",
                        "src": "92753:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3164,
                            "name": "poolLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3134,
                            "src": "92797:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3167,
                                "name": "losses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3157,
                                "src": "92825:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 3165,
                                "name": "poolLosses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3134,
                                "src": "92810:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "92810:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 3168,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "92810:22:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "92797:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3170,
                        "nodeType": "ExpressionStatement",
                        "src": "92797:35:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 3171,
                            "name": "_updateLossesBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3202
                            ],
                            "referencedDeclaration": 3202,
                            "src": "92843:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 3172,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "92843:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 3173,
                        "nodeType": "ExpressionStatement",
                        "src": "92843:22:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3153,
                    "nodeType": "StructuredDocumentation",
                    "src": "92610:57:0",
                    "text": "@dev Realizes losses incurred to LPs."
                  },
                  "id": 3175,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_recognizeLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3155,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "92709:8:0"
                  },
                  "parameters": {
                    "id": 3154,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "92697:2:0"
                  },
                  "returnParameters": {
                    "id": 3158,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3157,
                        "mutability": "mutable",
                        "name": "losses",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3175,
                        "src": "92727:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3156,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "92727:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "92726:16:0"
                  },
                  "scope": 3230,
                  "src": "92672:200:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    2378
                  ],
                  "body": {
                    "id": 3201,
                    "nodeType": "Block",
                    "src": "93172:177:0",
                    "statements": [
                      {
                        "assignments": [
                          3183
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3183,
                            "mutability": "mutable",
                            "name": "_prevLossesTokenBalance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3201,
                            "src": "93182:31:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3182,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "93182:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3185,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 3184,
                          "name": "lossesBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3140,
                          "src": "93216:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "93182:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3186,
                            "name": "lossesBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3140,
                            "src": "93240:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3187,
                            "name": "poolLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3134,
                            "src": "93256:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "93240:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3189,
                        "nodeType": "ExpressionStatement",
                        "src": "93240:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3197,
                                  "name": "_prevLossesTokenBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3183,
                                  "src": "93317:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "93310:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3195,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "93310:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3198,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "93310:31:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3192,
                                  "name": "lossesBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3140,
                                  "src": "93291:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3191,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "93284:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3190,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "93284:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3193,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "93284:21:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 3194,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "93284:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 3199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "93284:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 3181,
                        "id": 3200,
                        "nodeType": "Return",
                        "src": "93277:65:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3176,
                    "nodeType": "StructuredDocumentation",
                    "src": "92878:222:0",
                    "text": "@dev    Updates the current losses balance and returns the difference of the new and previous losses balance.\n@return A int256 representing the difference of the new and previous losses balance."
                  },
                  "id": 3202,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateLossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3178,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "93146:8:0"
                  },
                  "parameters": {
                    "id": 3177,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "93134:2:0"
                  },
                  "returnParameters": {
                    "id": 3181,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3180,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3202,
                        "src": "93164:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3179,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "93164:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "93163:8:0"
                  },
                  "scope": 3230,
                  "src": "93105:244:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1924
                  ],
                  "body": {
                    "id": 3228,
                    "nodeType": "Block",
                    "src": "93659:182:0",
                    "statements": [
                      {
                        "assignments": [
                          3210
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3210,
                            "mutability": "mutable",
                            "name": "_prevFundsTokenBalance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3228,
                            "src": "93669:30:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3209,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "93669:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3212,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 3211,
                          "name": "interestBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3137,
                          "src": "93702:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "93669:48:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3213,
                            "name": "interestBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3137,
                            "src": "93728:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3214,
                            "name": "interestSum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3131,
                            "src": "93746:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "93728:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3216,
                        "nodeType": "ExpressionStatement",
                        "src": "93728:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3224,
                                  "name": "_prevFundsTokenBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3210,
                                  "src": "93810:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3223,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "93803:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3222,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "93803:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "93803:30:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3219,
                                  "name": "interestBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3137,
                                  "src": "93782:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "93775:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3217,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "93775:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3220,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "93775:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 3221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "93775:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 3226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "93775:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 3208,
                        "id": 3227,
                        "nodeType": "Return",
                        "src": "93768:66:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3203,
                    "nodeType": "StructuredDocumentation",
                    "src": "93355:228:0",
                    "text": "@dev    Updates the current interest balance and returns the difference of the new and previous interest balance.\n@return A int256 representing the difference of the new and previous interest balance."
                  },
                  "id": 3229,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateFundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3205,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "93633:8:0"
                  },
                  "parameters": {
                    "id": 3204,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "93621:2:0"
                  },
                  "returnParameters": {
                    "id": 3208,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3207,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3229,
                        "src": "93651:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3206,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "93651:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "93650:8:0"
                  },
                  "scope": 3230,
                  "src": "93588:253:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7393,
              "src": "92246:1598:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3232,
                    "name": "IPoolFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3120,
                    "src": "94182:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolFDT_$3120",
                      "typeString": "contract IPoolFDT"
                    }
                  },
                  "id": 3233,
                  "nodeType": "InheritanceSpecifier",
                  "src": "94182:8:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                2006,
                3120
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 3231,
                "nodeType": "StructuredDocumentation",
                "src": "94086:77:0",
                "text": "@title Pool maintains all accounting and functionality related to Pools."
              },
              "fullyImplemented": false,
              "id": 3697,
              "linearizedBaseContracts": [
                3697,
                3120,
                2006,
                141,
                77
              ],
              "name": "IPool",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "IPool.State",
                  "id": 3237,
                  "members": [
                    {
                      "id": 3234,
                      "name": "Initialized",
                      "nodeType": "EnumValue",
                      "src": "94448:11:0"
                    },
                    {
                      "id": 3235,
                      "name": "Finalized",
                      "nodeType": "EnumValue",
                      "src": "94461:9:0"
                    },
                    {
                      "id": 3236,
                      "name": "Deactivated",
                      "nodeType": "EnumValue",
                      "src": "94472:11:0"
                    }
                  ],
                  "name": "State",
                  "nodeType": "EnumDefinition",
                  "src": "94435:50:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3238,
                    "nodeType": "StructuredDocumentation",
                    "src": "94491:224:0",
                    "text": "@dev   Emits an event indicating a Loan was funded.\n@param loan         The funded Loan.\n@param debtLocker   The DebtLocker.\n@param amountFunded The amount the Loan was funded for."
                  },
                  "id": 3246,
                  "name": "LoanFunded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3245,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3240,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3246,
                        "src": "94737:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3239,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "94737:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3242,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3246,
                        "src": "94759:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3241,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "94759:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3244,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amountFunded",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3246,
                        "src": "94779:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3243,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "94779:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "94736:64:0"
                  },
                  "src": "94720:81:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3247,
                    "nodeType": "StructuredDocumentation",
                    "src": "94807:418:0",
                    "text": "@dev   Emits an event indicating a Loan was claimed.\n@param loan                The Loan.\n@param interest            The interest.\n@param principal           The principal.\n@param fee                 The total fee.\n@param stakeLockerPortion  The portion of the fee for Stakers.\n@param poolDelegatePortion The portion of the fee for the Pool Delegate."
                  },
                  "id": 3261,
                  "name": "Claim",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3260,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3249,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95242:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "95242:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3251,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "interest",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95264:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3250,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95264:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3253,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "principal",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95282:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3252,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95282:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3255,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95301:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3254,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95301:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3257,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeLockerPortion",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95314:26:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3256,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95314:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3259,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "poolDelegatePortion",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95342:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3258,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95342:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "95241:129:0"
                  },
                  "src": "95230:141:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3262,
                    "nodeType": "StructuredDocumentation",
                    "src": "95377:334:0",
                    "text": "@dev   Emits an event indicating some Balance was updated.\n@param liquidityProvider The address of a Liquidity Provider.\n@param token             The address of the token for which the balance of `liquidityProvider` changed.\n@param balance           The new balance for `liquidityProvider`."
                  },
                  "id": 3270,
                  "name": "BalanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3269,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3264,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3270,
                        "src": "95737:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3263,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "95737:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3266,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3270,
                        "src": "95772:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3265,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "95772:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3268,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3270,
                        "src": "95795:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3267,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95795:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "95736:75:0"
                  },
                  "src": "95716:96:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3271,
                    "nodeType": "StructuredDocumentation",
                    "src": "95818:343:0",
                    "text": "@dev   Emits an event indicating a transfer of funds was performed by a custodian.\n@param custodian The address of the custodian.\n@param from      The source of funds that were custodied.\n@param to        The destination of funds.\n@param amount    The amount of custodied tokens transferred."
                  },
                  "id": 3281,
                  "name": "CustodyTransfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3280,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3273,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3281,
                        "src": "96188:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3272,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96188:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3275,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3281,
                        "src": "96215:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3274,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96215:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3277,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3281,
                        "src": "96237:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3276,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96237:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3279,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3281,
                        "src": "96257:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3278,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "96257:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "96187:85:0"
                  },
                  "src": "96166:107:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3282,
                    "nodeType": "StructuredDocumentation",
                    "src": "96279:488:0",
                    "text": "@dev   Emits an event indicating a change in the total amount in custodianship for an account.\n@param liquidityProvider The address of amount who's funds are being custodied.\n@param custodian         The address of the custodian.\n@param oldAllowance      The original total amount in custodian by `custodian` for `liquidityProvider`.\n@param newAllowance      The updated total amount in custodian by `custodian` for `liquidityProvider`."
                  },
                  "id": 3292,
                  "name": "CustodyAllowanceChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3291,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3284,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3292,
                        "src": "96802:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3283,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96802:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3286,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3292,
                        "src": "96837:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3285,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96837:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3288,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oldAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3292,
                        "src": "96864:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3287,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "96864:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3290,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3292,
                        "src": "96886:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3289,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "96886:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "96801:106:0"
                  },
                  "src": "96772:136:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3293,
                    "nodeType": "StructuredDocumentation",
                    "src": "96914:244:0",
                    "text": "@dev   Emits an event indicating a that a Liquidity Provider's status has changed.\n@param liquidityProvider The address of a Liquidity Provider.\n@param status            The new status of `liquidityProvider`."
                  },
                  "id": 3299,
                  "name": "LPStatusChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3298,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3295,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3299,
                        "src": "97185:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3294,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "97185:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3297,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3299,
                        "src": "97220:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3296,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "97220:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97184:48:0"
                  },
                  "src": "97163:70:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3300,
                    "nodeType": "StructuredDocumentation",
                    "src": "97239:153:0",
                    "text": "@dev   Emits an event indicating a that the Liquidity Cap for the Pool was set.\n@param newLiquidityCap The new liquidity cap."
                  },
                  "id": 3304,
                  "name": "LiquidityCapSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3303,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3302,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newLiquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3304,
                        "src": "97419:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3301,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "97419:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97418:25:0"
                  },
                  "src": "97397:47:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3305,
                    "nodeType": "StructuredDocumentation",
                    "src": "97450:150:0",
                    "text": "@dev   Emits an event indicating a that the lockup period for the Pool was set.\n@param newLockupPeriod The new lockup cap."
                  },
                  "id": 3309,
                  "name": "LockupPeriodSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3308,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3307,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3309,
                        "src": "97627:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3306,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "97627:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97626:25:0"
                  },
                  "src": "97605:47:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3310,
                    "nodeType": "StructuredDocumentation",
                    "src": "97658:170:0",
                    "text": "@dev   Emits an event indicating a that the staking fee for the Pool was set.\n@param newStakingFee The new fee Stakers earn (in basis points)."
                  },
                  "id": 3314,
                  "name": "StakingFeeSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3313,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3312,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newStakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3314,
                        "src": "97853:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3311,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "97853:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97852:23:0"
                  },
                  "src": "97833:43:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3315,
                    "nodeType": "StructuredDocumentation",
                    "src": "97882:142:0",
                    "text": "@dev   Emits an event indicating a that the state of the Pool has changed.\n@param state The new state of the Pool."
                  },
                  "id": 3319,
                  "name": "PoolStateChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3318,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3317,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "state",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3319,
                        "src": "98052:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$3237",
                          "typeString": "enum IPool.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3316,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3237,
                          "src": "98052:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "98051:13:0"
                  },
                  "src": "98029:36:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3320,
                    "nodeType": "StructuredDocumentation",
                    "src": "98071:265:0",
                    "text": "@dev   Emits an event indicating a that the withdrawal cooldown for a Liquidity Provider of the Pool has updated.\n@param liquidityProvider The address of a Liquidity Provider.\n@param cooldown          The new withdrawal cooldown."
                  },
                  "id": 3326,
                  "name": "Cooldown",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3325,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3322,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3326,
                        "src": "98356:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3321,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "98356:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3324,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "cooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3326,
                        "src": "98391:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3323,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "98391:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "98355:53:0"
                  },
                  "src": "98341:68:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3327,
                    "nodeType": "StructuredDocumentation",
                    "src": "98415:183:0",
                    "text": "@dev   Emits an event indicating a that a Pool's openness to the public has changed.\n@param isOpen Whether the Pool is open to the public to add liquidity."
                  },
                  "id": 3331,
                  "name": "PoolOpenedToPublic",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3330,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3329,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "isOpen",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3331,
                        "src": "98628:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3328,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "98628:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "98627:13:0"
                  },
                  "src": "98603:38:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3332,
                    "nodeType": "StructuredDocumentation",
                    "src": "98647:203:0",
                    "text": "@dev   Emits an event indicating a that a PoolAdmin was set.\n@param poolAdmin The address of a PoolAdmin.\n@param allowed   Whether `poolAdmin` is an admin of the Pool."
                  },
                  "id": 3338,
                  "name": "PoolAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3337,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3334,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3338,
                        "src": "98874:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3333,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "98874:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3336,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3338,
                        "src": "98901:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3335,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "98901:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "98873:41:0"
                  },
                  "src": "98855:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3339,
                    "nodeType": "StructuredDocumentation",
                    "src": "98921:253:0",
                    "text": "@dev   Emits an event indicating a that a Liquidity Provider's effective deposit date has changed.\n@param liquidityProvider The address of a Liquidity Provider.\n@param depositDate       The new effective deposit date."
                  },
                  "id": 3345,
                  "name": "DepositDateUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3344,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3341,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3345,
                        "src": "99204:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3340,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "99204:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3343,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "depositDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3345,
                        "src": "99239:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3342,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "99239:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "99203:56:0"
                  },
                  "src": "99179:81:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3346,
                    "nodeType": "StructuredDocumentation",
                    "src": "99266:303:0",
                    "text": "@dev   Emits an event indicating a that a Liquidity Provider's total amount in custody of custodians has changed.\n@param liquidityProvider The address of a Liquidity Provider.\n@param newTotalAllowance The total amount in custody of custodians for `liquidityProvider`."
                  },
                  "id": 3352,
                  "name": "TotalCustodyAllowanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3351,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3348,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3352,
                        "src": "99609:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3347,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "99609:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3350,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newTotalAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3352,
                        "src": "99644:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3349,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "99644:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "99608:62:0"
                  },
                  "src": "99574:97:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3353,
                    "nodeType": "StructuredDocumentation",
                    "src": "99677:552:0",
                    "text": "@dev   Emits an event indicating the one of the Pool's Loans defaulted.\n@param loan                            The address of the Loan that defaulted.\n@param defaultSuffered                 The amount of default suffered.\n@param bptsBurned                      The amount of BPTs burned to recover funds.\n@param bptsReturned                    The amount of BPTs returned to Liquidity Provider.\n@param liquidityAssetRecoveredFromBurn The amount of Liquidity Asset recovered from burning BPTs."
                  },
                  "id": 3365,
                  "name": "DefaultSuffered",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3364,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3355,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3365,
                        "src": "100265:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3354,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "100265:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3357,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "defaultSuffered",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3365,
                        "src": "100295:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3356,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "100295:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3359,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "bptsBurned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3365,
                        "src": "100328:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3358,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "100328:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3361,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "bptsReturned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3365,
                        "src": "100356:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3360,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "100356:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3363,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAssetRecoveredFromBurn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3365,
                        "src": "100386:39:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3362,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "100386:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "100255:176:0"
                  },
                  "src": "100234:198:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3366,
                    "nodeType": "StructuredDocumentation",
                    "src": "100438:65:0",
                    "text": "@dev The factory type of `DebtLockerFactory`."
                  },
                  "functionSelector": "174a5be4",
                  "id": 3371,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3367,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "100527:2:0"
                  },
                  "returnParameters": {
                    "id": 3370,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3369,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3371,
                        "src": "100553:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3368,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "100553:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "100552:7:0"
                  },
                  "scope": 3697,
                  "src": "100508:52:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3372,
                    "nodeType": "StructuredDocumentation",
                    "src": "100566:100:0",
                    "text": "@dev The asset deposited by Lenders into the LiquidityLocker, for funding Loans."
                  },
                  "functionSelector": "209b2bca",
                  "id": 3377,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3373,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "100694:2:0"
                  },
                  "returnParameters": {
                    "id": 3376,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3375,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3377,
                        "src": "100720:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3374,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "100720:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "100719:8:0"
                  },
                  "scope": 3697,
                  "src": "100671:57:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3378,
                    "nodeType": "StructuredDocumentation",
                    "src": "100734:91:0",
                    "text": "@dev The Pool Delegate address, maintains full authority over the Pool."
                  },
                  "functionSelector": "4046af2b",
                  "id": 3383,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolDelegate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3379,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "100851:2:0"
                  },
                  "returnParameters": {
                    "id": 3382,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3381,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3383,
                        "src": "100877:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3380,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "100877:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "100876:9:0"
                  },
                  "scope": 3697,
                  "src": "100830:56:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3384,
                    "nodeType": "StructuredDocumentation",
                    "src": "100892:138:0",
                    "text": "@dev The address of the asset deposited by Stakers into the StakeLocker (BPTs), for liquidation during default events."
                  },
                  "functionSelector": "9759164a",
                  "id": 3389,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3385,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101059:2:0"
                  },
                  "returnParameters": {
                    "id": 3388,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3387,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3389,
                        "src": "101085:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3386,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "101085:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101084:9:0"
                  },
                  "scope": 3697,
                  "src": "101035:59:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3390,
                    "nodeType": "StructuredDocumentation",
                    "src": "101100:138:0",
                    "text": "@dev The address of the asset deposited by Stakers into the StakeLocker (BPTs), for liquidation during default events."
                  },
                  "functionSelector": "80cd916d",
                  "id": 3395,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3391,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101262:2:0"
                  },
                  "returnParameters": {
                    "id": 3394,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3393,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3395,
                        "src": "101288:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3392,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "101288:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101287:9:0"
                  },
                  "scope": 3697,
                  "src": "101243:54:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3396,
                    "nodeType": "StructuredDocumentation",
                    "src": "101303:80:0",
                    "text": "@dev The address of the StakeLocker, escrowing `stakeAsset`."
                  },
                  "functionSelector": "033b1cf0",
                  "id": 3401,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3397,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101408:2:0"
                  },
                  "returnParameters": {
                    "id": 3400,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3399,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3401,
                        "src": "101434:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3398,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "101434:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101433:9:0"
                  },
                  "scope": 3697,
                  "src": "101388:55:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3402,
                    "nodeType": "StructuredDocumentation",
                    "src": "101449:61:0",
                    "text": "@dev The factory that deployed this Loan."
                  },
                  "functionSelector": "0d49b38c",
                  "id": 3407,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "superFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3403,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101536:2:0"
                  },
                  "returnParameters": {
                    "id": 3406,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3405,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3407,
                        "src": "101562:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3404,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "101562:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101561:9:0"
                  },
                  "scope": 3697,
                  "src": "101515:56:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3408,
                    "nodeType": "StructuredDocumentation",
                    "src": "101577:64:0",
                    "text": "@dev The fee Stakers earn (in basis points)."
                  },
                  "functionSelector": "eff98843",
                  "id": 3413,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakingFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3409,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101665:2:0"
                  },
                  "returnParameters": {
                    "id": 3412,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3411,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3413,
                        "src": "101691:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3410,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "101691:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101690:9:0"
                  },
                  "scope": 3697,
                  "src": "101646:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3414,
                    "nodeType": "StructuredDocumentation",
                    "src": "101706:75:0",
                    "text": "@dev The fee the Pool Delegate earns (in basis points)."
                  },
                  "functionSelector": "b69410de",
                  "id": 3419,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "delegateFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3415,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101806:2:0"
                  },
                  "returnParameters": {
                    "id": 3418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3417,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3419,
                        "src": "101832:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3416,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "101832:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101831:9:0"
                  },
                  "scope": 3697,
                  "src": "101786:55:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3420,
                    "nodeType": "StructuredDocumentation",
                    "src": "101847:71:0",
                    "text": "@dev The sum of all outstanding principal on Loans."
                  },
                  "functionSelector": "ac641655",
                  "id": 3425,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "principalOut",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3421,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101944:2:0"
                  },
                  "returnParameters": {
                    "id": 3424,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3423,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3425,
                        "src": "101970:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3422,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "101970:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101969:9:0"
                  },
                  "scope": 3697,
                  "src": "101923:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3426,
                    "nodeType": "StructuredDocumentation",
                    "src": "101985:77:0",
                    "text": "@dev The amount of liquidity tokens accepted by the Pool."
                  },
                  "functionSelector": "76687d3d",
                  "id": 3431,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityCap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3427,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "102088:2:0"
                  },
                  "returnParameters": {
                    "id": 3430,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3429,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3431,
                        "src": "102114:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3428,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "102114:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102113:9:0"
                  },
                  "scope": 3697,
                  "src": "102067:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3432,
                    "nodeType": "StructuredDocumentation",
                    "src": "102129:119:0",
                    "text": "@dev The period of time from an account's deposit date during which they cannot withdraw any funds."
                  },
                  "functionSelector": "ee947a7c",
                  "id": 3437,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3433,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "102274:2:0"
                  },
                  "returnParameters": {
                    "id": 3436,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3435,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3437,
                        "src": "102300:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3434,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "102300:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102299:9:0"
                  },
                  "scope": 3697,
                  "src": "102253:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3438,
                    "nodeType": "StructuredDocumentation",
                    "src": "102315:80:0",
                    "text": "@dev Whether the Pool is open to the public for LP deposits."
                  },
                  "functionSelector": "1831ccf2",
                  "id": 3443,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3439,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "102421:2:0"
                  },
                  "returnParameters": {
                    "id": 3442,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3441,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3443,
                        "src": "102447:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3440,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "102447:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102446:6:0"
                  },
                  "scope": 3697,
                  "src": "102400:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3444,
                    "nodeType": "StructuredDocumentation",
                    "src": "102459:47:0",
                    "text": "@dev The state of the Pool."
                  },
                  "functionSelector": "641ad8a9",
                  "id": 3449,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolState",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3445,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "102529:2:0"
                  },
                  "returnParameters": {
                    "id": 3448,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3447,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3449,
                        "src": "102555:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$3237",
                          "typeString": "enum IPool.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3446,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3237,
                          "src": "102555:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102554:7:0"
                  },
                  "scope": 3697,
                  "src": "102511:51:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3450,
                    "nodeType": "StructuredDocumentation",
                    "src": "102568:203:0",
                    "text": "@dev    Used for withdraw penalty calculation.\n@param  account The address of an account.\n@return The unix timestamp of the weighted average deposit date of `account`."
                  },
                  "functionSelector": "24b92e8e",
                  "id": 3457,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "depositDate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3453,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3452,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3457,
                        "src": "102797:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3451,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "102797:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102796:17:0"
                  },
                  "returnParameters": {
                    "id": 3456,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3455,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3457,
                        "src": "102837:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3454,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "102837:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102836:9:0"
                  },
                  "scope": 3697,
                  "src": "102776:70:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3458,
                    "nodeType": "StructuredDocumentation",
                    "src": "102852:233:0",
                    "text": "@param  loan              The address of a Loan.\n@param  debtLockerFactory The address of a DebtLockerFactory.\n@return The address of the DebtLocker corresponding to `loan` and `debtLockerFactory`."
                  },
                  "functionSelector": "d7bd3c91",
                  "id": 3467,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "debtLockers",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3463,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3460,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3467,
                        "src": "103111:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3459,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103111:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3462,
                        "mutability": "mutable",
                        "name": "debtLockerFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3467,
                        "src": "103125:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3461,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103125:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103110:41:0"
                  },
                  "returnParameters": {
                    "id": 3466,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3465,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3467,
                        "src": "103175:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3464,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103175:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103174:9:0"
                  },
                  "scope": 3697,
                  "src": "103090:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3468,
                    "nodeType": "StructuredDocumentation",
                    "src": "103190:173:0",
                    "text": "@param  poolAdmin The address of a PoolAdmin.\n@return Whether `poolAdmin` has permission to do certain operations in case of disaster management."
                  },
                  "functionSelector": "613384f2",
                  "id": 3475,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolAdmins",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3471,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3470,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3475,
                        "src": "103388:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3469,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103388:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103387:19:0"
                  },
                  "returnParameters": {
                    "id": 3474,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3473,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3475,
                        "src": "103430:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3472,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "103430:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103429:6:0"
                  },
                  "scope": 3697,
                  "src": "103368:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3476,
                    "nodeType": "StructuredDocumentation",
                    "src": "103442:155:0",
                    "text": "@param  liquidityProvider The address of a LiquidityProvider.\n@return Whether `liquidityProvider` has early access to the Pool."
                  },
                  "functionSelector": "c59e3959",
                  "id": 3483,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowedLiquidityProviders",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3479,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3478,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3483,
                        "src": "103637:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3477,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103637:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103636:27:0"
                  },
                  "returnParameters": {
                    "id": 3482,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3481,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3483,
                        "src": "103687:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3480,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "103687:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103686:6:0"
                  },
                  "scope": 3697,
                  "src": "103602:91:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3484,
                    "nodeType": "StructuredDocumentation",
                    "src": "103699:182:0",
                    "text": "@param  liquidityProvider The address of a LiquidityProvider.\n@return The unix timestamp of when individual LPs have notified of their intent to withdraw."
                  },
                  "functionSelector": "d82745c8",
                  "id": 3491,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawCooldown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3487,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3486,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3491,
                        "src": "103912:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3485,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103912:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103911:27:0"
                  },
                  "returnParameters": {
                    "id": 3490,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3489,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3491,
                        "src": "103962:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3488,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "103962:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103961:9:0"
                  },
                  "scope": 3697,
                  "src": "103886:85:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3492,
                    "nodeType": "StructuredDocumentation",
                    "src": "103977:204:0",
                    "text": "@param  account   The address of an account.\n@param  custodian The address of a custodian.\n@return The amount of PoolFDTs of `account` that are \"locked\" at `custodian`."
                  },
                  "functionSelector": "c965b548",
                  "id": 3501,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "custodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3497,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3494,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3501,
                        "src": "104212:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3493,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "104212:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3496,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3501,
                        "src": "104229:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3495,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "104229:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "104211:36:0"
                  },
                  "returnParameters": {
                    "id": 3500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3499,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3501,
                        "src": "104271:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3498,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "104271:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "104270:9:0"
                  },
                  "scope": 3697,
                  "src": "104186:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3502,
                    "nodeType": "StructuredDocumentation",
                    "src": "104286:188:0",
                    "text": "@param  account   The address of an account.\n@return The total amount of PoolFDTs that are \"locked\" for `account`. Cannot be greater than the account's balance."
                  },
                  "functionSelector": "af6d5571",
                  "id": 3509,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3505,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3504,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3509,
                        "src": "104510:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3503,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "104510:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "104509:17:0"
                  },
                  "returnParameters": {
                    "id": 3508,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3507,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3509,
                        "src": "104550:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3506,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "104550:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "104549:9:0"
                  },
                  "scope": 3697,
                  "src": "104479:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3510,
                    "nodeType": "StructuredDocumentation",
                    "src": "104565:256:0",
                    "text": "@dev Finalizes the Pool, enabling deposits. \n@dev Checks the amount the Pool Delegate deposited to the StakeLocker. \n@dev Only the Pool Delegate can call this function. \n@dev It emits a `PoolStateChanged` event. "
                  },
                  "functionSelector": "4bb278f3",
                  "id": 3513,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "finalize",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3511,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "104843:2:0"
                  },
                  "returnParameters": {
                    "id": 3512,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "104854:0:0"
                  },
                  "scope": 3697,
                  "src": "104826:29:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3514,
                    "nodeType": "StructuredDocumentation",
                    "src": "104861:460:0",
                    "text": "@dev   Funds a Loan for an amount, utilizing the supplied DebtLockerFactory for DebtLockers. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `LoanFunded` event. \n@dev   It emits a `BalanceUpdated` event. \n@param loan      The address of the Loan to fund.\n@param dlFactory The address of the DebtLockerFactory to utilize.\n@param amt       The amount to fund the Loan."
                  },
                  "functionSelector": "1aa37cec",
                  "id": 3523,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3521,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3516,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3523,
                        "src": "105344:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3515,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105344:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3518,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3523,
                        "src": "105358:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3517,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105358:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3520,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3523,
                        "src": "105377:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3519,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "105377:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "105343:46:0"
                  },
                  "returnParameters": {
                    "id": 3522,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "105398:0:0"
                  },
                  "scope": 3697,
                  "src": "105326:73:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3524,
                    "nodeType": "StructuredDocumentation",
                    "src": "105405:516:0",
                    "text": "@dev   Liquidates a Loan. \n@dev   The Pool Delegate could liquidate the Loan only when the Loan completes its grace period. \n@dev   The Pool Delegate can claim its proportion of recovered funds from the liquidation using the `claim()` function. \n@dev   Only the Pool Delegate can call this function. \n@param loan      The address of the Loan to liquidate.\n@param dlFactory The address of the DebtLockerFactory that is used to pull corresponding DebtLocker."
                  },
                  "functionSelector": "40504ba0",
                  "id": 3531,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "triggerDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3529,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3526,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3531,
                        "src": "105950:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3525,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105950:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3528,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3531,
                        "src": "105964:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3527,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105964:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "105949:33:0"
                  },
                  "returnParameters": {
                    "id": 3530,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "105991:0:0"
                  },
                  "scope": 3697,
                  "src": "105926:66:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3532,
                    "nodeType": "StructuredDocumentation",
                    "src": "105998:837:0",
                    "text": "@dev    Claims available funds for the Loan through a specified DebtLockerFactory. \n@dev    Only the Pool Delegate or a Pool Admin can call this function. \n@dev    It emits two `BalanceUpdated` events. \n@dev    It emits a `Claim` event. \n@param  loan      The address of the loan to claim from.\n@param  dlFactory The address of the DebtLockerFactory.\n@return claimInfo The claim details. \n[0] => Total amount claimed, \n[1] => Interest portion claimed, \n[2] => Principal portion claimed, \n[3] => Fee portion claimed, \n[4] => Excess portion claimed, \n[5] => Recovered portion claimed (from liquidations), \n[6] => Default suffered. "
                  },
                  "functionSelector": "21c0b342",
                  "id": 3543,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "claim",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3537,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3534,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3543,
                        "src": "106855:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3533,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "106855:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3536,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3543,
                        "src": "106869:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3535,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "106869:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "106854:33:0"
                  },
                  "returnParameters": {
                    "id": 3542,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3541,
                        "mutability": "mutable",
                        "name": "claimInfo",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3543,
                        "src": "106906:27:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                          "typeString": "uint256[7]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3538,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "106906:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3540,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 3539,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "106914:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "106906:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                            "typeString": "uint256[7]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "106905:29:0"
                  },
                  "scope": 3697,
                  "src": "106840:95:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3544,
                    "nodeType": "StructuredDocumentation",
                    "src": "106941:279:0",
                    "text": "@dev Triggers deactivation, permanently shutting down the Pool. \n@dev Must have less than 100 USD worth of Liquidity Asset `principalOut`. \n@dev Only the Pool Delegate can call this function. \n@dev It emits a `PoolStateChanged` event. "
                  },
                  "functionSelector": "51b42b00",
                  "id": 3547,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deactivate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3545,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "107244:2:0"
                  },
                  "returnParameters": {
                    "id": 3546,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "107255:0:0"
                  },
                  "scope": 3697,
                  "src": "107225:31:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3548,
                    "nodeType": "StructuredDocumentation",
                    "src": "107266:242:0",
                    "text": "@dev   Sets the liquidity cap. \n@dev   Only the Pool Delegate or a Pool Admin can call this function. \n@dev   It emits a `LiquidityCapSet` event. \n@param newLiquidityCap The new liquidity cap value."
                  },
                  "functionSelector": "7b99adb1",
                  "id": 3553,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLiquidityCap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3551,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3550,
                        "mutability": "mutable",
                        "name": "newLiquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3553,
                        "src": "107538:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3549,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "107538:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "107537:25:0"
                  },
                  "returnParameters": {
                    "id": 3552,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "107571:0:0"
                  },
                  "scope": 3697,
                  "src": "107513:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3554,
                    "nodeType": "StructuredDocumentation",
                    "src": "107578:253:0",
                    "text": "@dev   Sets the lockup period. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `LockupPeriodSet` event. \n@param newLockupPeriod The new lockup period used to restrict the withdrawals."
                  },
                  "functionSelector": "c771c390",
                  "id": 3559,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3557,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3556,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3559,
                        "src": "107861:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3555,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "107861:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "107860:25:0"
                  },
                  "returnParameters": {
                    "id": 3558,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "107894:0:0"
                  },
                  "scope": 3697,
                  "src": "107836:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3560,
                    "nodeType": "StructuredDocumentation",
                    "src": "107901:212:0",
                    "text": "@dev   Sets the staking fee. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `StakingFeeSet` event. \n@param newStakingFee The new staking fee."
                  },
                  "functionSelector": "410dbf7e",
                  "id": 3565,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakingFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3563,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3562,
                        "mutability": "mutable",
                        "name": "newStakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3565,
                        "src": "108141:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3561,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "108141:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "108140:23:0"
                  },
                  "returnParameters": {
                    "id": 3564,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "108172:0:0"
                  },
                  "scope": 3697,
                  "src": "108118:55:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3566,
                    "nodeType": "StructuredDocumentation",
                    "src": "108179:312:0",
                    "text": "@dev   Sets the account status in the Pool's allowlist. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits an `LPStatusChanged` event. \n@param account The address to set status for.\n@param status  The status of an account in the allowlist."
                  },
                  "functionSelector": "7666f125",
                  "id": 3573,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setAllowList",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3571,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3568,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3573,
                        "src": "108518:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3567,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "108518:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3570,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3573,
                        "src": "108535:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3569,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "108535:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "108517:30:0"
                  },
                  "returnParameters": {
                    "id": 3572,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "108556:0:0"
                  },
                  "scope": 3697,
                  "src": "108496:61:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3574,
                    "nodeType": "StructuredDocumentation",
                    "src": "108563:309:0",
                    "text": "@dev   Sets a Pool Admin. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `PoolAdminSet` event. \n@param poolAdmin An address being allowed or disallowed as a Pool Admin.\n@param allowed   Whether `poolAdmin` is an admin of the Pool."
                  },
                  "functionSelector": "9185192a",
                  "id": 3581,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3579,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3576,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3581,
                        "src": "108899:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3575,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "108899:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3578,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3581,
                        "src": "108918:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3577,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "108918:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "108898:33:0"
                  },
                  "returnParameters": {
                    "id": 3580,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "108940:0:0"
                  },
                  "scope": 3697,
                  "src": "108877:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3582,
                    "nodeType": "StructuredDocumentation",
                    "src": "108947:265:0",
                    "text": "@dev   Sets whether the Pool is open to the public. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `PoolOpenedToPublic` event. \n@param open Whether the Pool is open to liquidity from the public."
                  },
                  "functionSelector": "a43baa3d",
                  "id": 3587,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setOpenToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3585,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3584,
                        "mutability": "mutable",
                        "name": "open",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3587,
                        "src": "109242:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3583,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "109242:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109241:11:0"
                  },
                  "returnParameters": {
                    "id": 3586,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "109261:0:0"
                  },
                  "scope": 3697,
                  "src": "109217:45:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3588,
                    "nodeType": "StructuredDocumentation",
                    "src": "109268:341:0",
                    "text": "@dev   Handles Liquidity Providers depositing of Liquidity Asset into the LiquidityLocker, minting PoolFDTs. \n@dev   It emits a `DepositDateUpdated` event. \n@dev   It emits a `BalanceUpdated` event. \n@dev   It emits a `Cooldown` event. \n@param amt The amount of Liquidity Asset to deposit."
                  },
                  "functionSelector": "b6b55f25",
                  "id": 3593,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deposit",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3591,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3590,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3593,
                        "src": "109631:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3589,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "109631:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109630:13:0"
                  },
                  "returnParameters": {
                    "id": 3592,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "109652:0:0"
                  },
                  "scope": 3697,
                  "src": "109614:39:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3594,
                    "nodeType": "StructuredDocumentation",
                    "src": "109659:187:0",
                    "text": "@dev Activates the cooldown period to withdraw. \n@dev It can't be called if the account is not providing liquidity. \n@dev It emits a `Cooldown` event. "
                  },
                  "functionSelector": "73ef9a50",
                  "id": 3597,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "intendToWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3595,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "109876:2:0"
                  },
                  "returnParameters": {
                    "id": 3596,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "109887:0:0"
                  },
                  "scope": 3697,
                  "src": "109851:37:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3598,
                    "nodeType": "StructuredDocumentation",
                    "src": "109894:146:0",
                    "text": "@dev Cancels an initiated withdrawal by resetting the account's withdraw cooldown. \n@dev It emits a `Cooldown` event. "
                  },
                  "functionSelector": "84b76824",
                  "id": 3601,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3599,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110068:2:0"
                  },
                  "returnParameters": {
                    "id": 3600,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110079:0:0"
                  },
                  "scope": 3697,
                  "src": "110045:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3602,
                    "nodeType": "StructuredDocumentation",
                    "src": "110086:245:0",
                    "text": "@dev   Handles Liquidity Providers withdrawing of Liquidity Asset from the LiquidityLocker, burning PoolFDTs. \n@dev   It emits two `BalanceUpdated` event. \n@param amt The amount of Liquidity Asset to withdraw."
                  },
                  "functionSelector": "2e1a7d4d",
                  "id": 3607,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3605,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3604,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3607,
                        "src": "110354:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3603,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "110354:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "110353:13:0"
                  },
                  "returnParameters": {
                    "id": 3606,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110375:0:0"
                  },
                  "scope": 3697,
                  "src": "110336:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": null,
                  "documentation": {
                    "id": 3608,
                    "nodeType": "StructuredDocumentation",
                    "src": "110382:179:0",
                    "text": "@dev Withdraws all claimable interest from the LiquidityLocker for an account using `interestSum` accounting. \n@dev It emits a `BalanceUpdated` event. "
                  },
                  "functionSelector": "24600fc3",
                  "id": 3612,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3610,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "110600:8:0"
                  },
                  "parameters": {
                    "id": 3609,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110588:2:0"
                  },
                  "returnParameters": {
                    "id": 3611,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110608:0:0"
                  },
                  "scope": 3697,
                  "src": "110566:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3613,
                    "nodeType": "StructuredDocumentation",
                    "src": "110615:447:0",
                    "text": "@dev   Increases the custody allowance for a given Custodian corresponding to the calling 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": 3620,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3618,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3615,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3620,
                        "src": "111101:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3614,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "111101:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3617,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3620,
                        "src": "111120:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3616,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "111120:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "111100:35:0"
                  },
                  "returnParameters": {
                    "id": 3619,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "111144:0:0"
                  },
                  "scope": 3697,
                  "src": "111067:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3621,
                    "nodeType": "StructuredDocumentation",
                    "src": "111151:665:0",
                    "text": "@dev   Transfers custodied PoolFDTs 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 PoolFDTs.\n@param to     The address which will be the new owner of the amount of PoolFDTs.\n@param amount The amount of PoolFDTs transferred."
                  },
                  "functionSelector": "2ac04ac8",
                  "id": 3630,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3628,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3623,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3630,
                        "src": "111850:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3622,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "111850:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3625,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3630,
                        "src": "111864:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3624,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "111864:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3627,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3630,
                        "src": "111876:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3626,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "111876:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "111849:42:0"
                  },
                  "returnParameters": {
                    "id": 3629,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "111900:0:0"
                  },
                  "scope": 3697,
                  "src": "111821:80:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3631,
                    "nodeType": "StructuredDocumentation",
                    "src": "111907:192:0",
                    "text": "@dev   Transfers any locked funds to the Governor. \n@dev   Only the Governor can call this function. \n@param token The address of the token to be reclaimed."
                  },
                  "functionSelector": "8905fd4f",
                  "id": 3636,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "reclaimERC20",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3634,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3633,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3636,
                        "src": "112126:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3632,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "112126:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "112125:15:0"
                  },
                  "returnParameters": {
                    "id": 3635,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "112149:0:0"
                  },
                  "scope": 3697,
                  "src": "112104:46:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3637,
                    "nodeType": "StructuredDocumentation",
                    "src": "112160:419:0",
                    "text": "@dev    Calculates the value of BPT in units of Liquidity Asset.\n@param  _bPool          The address of Balancer pool.\n@param  _liquidityAsset The asset used by Pool for liquidity to fund Loans.\n@param  _staker         The address that deposited BPTs to StakeLocker.\n@param  _stakeLocker    Escrows BPTs deposited by Staker.\n@return USDC value of staker BPTs."
                  },
                  "functionSelector": "681cb10a",
                  "id": 3650,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "BPTVal",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3646,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3639,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "112609:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3638,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "112609:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3641,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "112633:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3640,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "112633:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3643,
                        "mutability": "mutable",
                        "name": "_staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "112666:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3642,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "112666:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3645,
                        "mutability": "mutable",
                        "name": "_stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "112691:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3644,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "112691:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "112599:118:0"
                  },
                  "returnParameters": {
                    "id": 3649,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3648,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "112741:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3647,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "112741:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "112740:9:0"
                  },
                  "scope": 3697,
                  "src": "112584:166:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3651,
                    "nodeType": "StructuredDocumentation",
                    "src": "112756:215:0",
                    "text": "@dev   Checks that the given deposit amount is acceptable based on current liquidityCap.\n@param depositAmt The amount of tokens (i.e liquidityAsset type) the account is trying to deposit."
                  },
                  "functionSelector": "80e7ce85",
                  "id": 3658,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isDepositAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3654,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3653,
                        "mutability": "mutable",
                        "name": "depositAmt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3658,
                        "src": "113002:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3652,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113002:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "113001:20:0"
                  },
                  "returnParameters": {
                    "id": 3657,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3656,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3658,
                        "src": "113045:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3655,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "113045:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "113044:6:0"
                  },
                  "scope": 3697,
                  "src": "112976:75:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3659,
                    "nodeType": "StructuredDocumentation",
                    "src": "113057:458:0",
                    "text": "@dev    Returns information on the stake requirements.\n@return The min amount of Liquidity Asset coverage from staking required.\n@return The present amount of Liquidity Asset coverage from the Pool Delegate stake.\n@return Whether enough stake is present from the Pool Delegate for finalization.\n@return The staked BPTs required for minimum Liquidity Asset coverage.\n@return The current staked BPTs."
                  },
                  "functionSelector": "13bf9e7e",
                  "id": 3672,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getInitialStakeRequirements",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3660,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "113556:2:0"
                  },
                  "returnParameters": {
                    "id": 3671,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3662,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "113582:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3661,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113582:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3664,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "113591:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3663,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113591:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3666,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "113600:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3665,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "113600:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3668,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "113606:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3667,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113606:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3670,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "113615:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3669,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113615:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "113581:42:0"
                  },
                  "scope": 3697,
                  "src": "113520:104:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3673,
                    "nodeType": "StructuredDocumentation",
                    "src": "113630:692:0",
                    "text": "@dev    Calculates BPTs required if burning BPTs for the Liquidity Asset, given supplied `tokenAmountOutRequired`.\n@param  _bPool                        The Balancer pool that issues the BPTs.\n@param  _liquidityAsset               Swap out asset (e.g. USDC) to receive when burning BPTs.\n@param  _staker                       The address that deposited BPTs to StakeLocker.\n@param  _stakeLocker                  Escrows BPTs deposited by Staker.\n@param  _liquidityAssetAmountRequired The amount of Liquidity Asset required to recover.\n@return The `poolAmountIn` required.\n@return The `poolAmountIn` currently staked."
                  },
                  "functionSelector": "c3746825",
                  "id": 3690,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolSharesRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3684,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3675,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114367:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3674,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "114367:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3677,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114391:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3676,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "114391:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3679,
                        "mutability": "mutable",
                        "name": "_staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114424:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3678,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "114424:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3681,
                        "mutability": "mutable",
                        "name": "_stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114449:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3680,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "114449:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3683,
                        "mutability": "mutable",
                        "name": "_liquidityAssetAmountRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114479:37:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3682,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "114479:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "114357:165:0"
                  },
                  "returnParameters": {
                    "id": 3689,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3686,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114546:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3685,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "114546:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3688,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114555:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3687,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "114555:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "114545:18:0"
                  },
                  "scope": 3697,
                  "src": "114327:237:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3691,
                    "nodeType": "StructuredDocumentation",
                    "src": "114570:124:0",
                    "text": "@dev    Checks that the Pool state is `Finalized`.\n@return Whether the Pool is in a Finalized state."
                  },
                  "functionSelector": "4f85221a",
                  "id": 3696,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isPoolFinalized",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3692,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "114723:2:0"
                  },
                  "returnParameters": {
                    "id": 3695,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3694,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3696,
                        "src": "114749:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3693,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "114749:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "114748:6:0"
                  },
                  "scope": 3697,
                  "src": "114699:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "94163:20595:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 3698,
                "nodeType": "StructuredDocumentation",
                "src": "114938:43:0",
                "text": "@title PoolFactory instantiates Pools."
              },
              "fullyImplemented": false,
              "id": 3821,
              "linearizedBaseContracts": [
                3821
              ],
              "name": "IPoolFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3699,
                    "nodeType": "StructuredDocumentation",
                    "src": "115011:253:0",
                    "text": "@dev   Emits an event indicating a PoolFactoryAdmin was allowed.\n@param poolFactoryAdmin The address of a PoolFactoryAdmin.\n@param allowed          Whether `poolFactoryAdmin` is allowed as an admin of the PoolFactory."
                  },
                  "id": 3705,
                  "name": "PoolFactoryAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3704,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3701,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "poolFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3705,
                        "src": "115295:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3700,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "115295:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3703,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3705,
                        "src": "115329:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3702,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "115329:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "115294:48:0"
                  },
                  "src": "115269:74:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3706,
                    "nodeType": "StructuredDocumentation",
                    "src": "115349:781:0",
                    "text": "@dev   Emits an event indicating a Pool was created.\n@param pool             The address of the Pool.\n@param delegate         The PoolDelegate.\n@param liquidityAsset   The asset Loans will be funded in.\n@param stakeAsset       The asset stake will be locked in.\n@param liquidityLocker  The address of the LiquidityLocker.\n@param stakeLocker      The address of the StakeLocker.\n@param stakingFee       The fee paid to stakers on Loans.\n@param stakingFee       The fee paid to the Pool Delegate on Loans.\n@param liquidityCap     The maximum liquidity the Pool will hold.\n@param name             The name of the Pool FDTs.\n@param symbol           The symbol of the Pool FDTs."
                  },
                  "id": 3730,
                  "name": "PoolCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3729,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3708,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116162:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3707,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116162:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3710,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "delegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116192:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3709,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116192:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3712,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116226:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3711,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116226:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3714,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116258:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3713,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116258:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3716,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116286:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3715,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116286:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3718,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116319:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3717,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116319:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3720,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116348:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3719,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "116348:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3722,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116376:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3721,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "116376:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3724,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116405:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3723,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "116405:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3726,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116435:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3725,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "116435:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3728,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116457:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3727,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "116457:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116152:325:0"
                  },
                  "src": "116135:343:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3731,
                    "nodeType": "StructuredDocumentation",
                    "src": "116484:70:0",
                    "text": "@dev The factory type of `LiquidityLockerFactory`."
                  },
                  "functionSelector": "c5ba73ed",
                  "id": 3736,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "LL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3732,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116578:2:0"
                  },
                  "returnParameters": {
                    "id": 3735,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3734,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3736,
                        "src": "116604:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3733,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "116604:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116603:7:0"
                  },
                  "scope": 3821,
                  "src": "116559:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3737,
                    "nodeType": "StructuredDocumentation",
                    "src": "116617:66:0",
                    "text": "@dev The factory type of `StakeLockerFactory`."
                  },
                  "functionSelector": "9f71f14a",
                  "id": 3742,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "SL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3738,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116707:2:0"
                  },
                  "returnParameters": {
                    "id": 3741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3740,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3742,
                        "src": "116733:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3739,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "116733:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116732:7:0"
                  },
                  "scope": 3821,
                  "src": "116688:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3743,
                    "nodeType": "StructuredDocumentation",
                    "src": "116746:69:0",
                    "text": "@dev The incrementor for number of Pools created."
                  },
                  "functionSelector": "945164e7",
                  "id": 3748,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolsCreated",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3744,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116841:2:0"
                  },
                  "returnParameters": {
                    "id": 3747,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3746,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3748,
                        "src": "116867:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3745,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "116867:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116866:9:0"
                  },
                  "scope": 3821,
                  "src": "116820:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3749,
                    "nodeType": "StructuredDocumentation",
                    "src": "116882:59:0",
                    "text": "@dev The current MapleGlobals instance."
                  },
                  "functionSelector": "c3124525",
                  "id": 3754,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "globals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3750,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116962:2:0"
                  },
                  "returnParameters": {
                    "id": 3753,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3752,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3754,
                        "src": "116988:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3751,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "116988:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116987:15:0"
                  },
                  "scope": 3821,
                  "src": "116946:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3755,
                    "nodeType": "StructuredDocumentation",
                    "src": "117009:105:0",
                    "text": "@param  index An index of a Pool.\n@return The address of the Pool at `index`."
                  },
                  "functionSelector": "ac4afa38",
                  "id": 3762,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pools",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3758,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3757,
                        "mutability": "mutable",
                        "name": "index",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3762,
                        "src": "117134:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3756,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "117134:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117133:15:0"
                  },
                  "returnParameters": {
                    "id": 3761,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3760,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3762,
                        "src": "117172:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3759,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "117172:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117171:9:0"
                  },
                  "scope": 3821,
                  "src": "117119:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3763,
                    "nodeType": "StructuredDocumentation",
                    "src": "117187:116:0",
                    "text": "@param  pool The address of a Pool.\n@return Whether the contract at `address` is a Pool."
                  },
                  "functionSelector": "5b16ebb7",
                  "id": 3770,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3766,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3765,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3770,
                        "src": "117324:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3764,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "117324:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117323:14:0"
                  },
                  "returnParameters": {
                    "id": 3769,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3768,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3770,
                        "src": "117361:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3767,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "117361:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117360:6:0"
                  },
                  "scope": 3821,
                  "src": "117308:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3771,
                    "nodeType": "StructuredDocumentation",
                    "src": "117373:197:0",
                    "text": "@param  poolFactoryAdmin The address of a PoolFactoryAdmin.\n@return Whether the `poolFactoryAdmin` has permission to do certain operations in case of disaster management"
                  },
                  "functionSelector": "6050abb2",
                  "id": 3778,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolFactoryAdmins",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3774,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3773,
                        "mutability": "mutable",
                        "name": "poolFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3778,
                        "src": "117602:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3772,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "117602:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117601:26:0"
                  },
                  "returnParameters": {
                    "id": 3777,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3776,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3778,
                        "src": "117651:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3775,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "117651:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117650:6:0"
                  },
                  "scope": 3821,
                  "src": "117575:82:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3779,
                    "nodeType": "StructuredDocumentation",
                    "src": "117663:172:0",
                    "text": "@dev   Sets MapleGlobals instance. \n@dev   Only the Governor can call this function. \n@param newGlobals The address of new MapleGlobals."
                  },
                  "functionSelector": "cc2e0a26",
                  "id": 3784,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGlobals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3782,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3781,
                        "mutability": "mutable",
                        "name": "newGlobals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3784,
                        "src": "117860:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3780,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "117860:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117859:20:0"
                  },
                  "returnParameters": {
                    "id": 3783,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "117888:0:0"
                  },
                  "scope": 3821,
                  "src": "117840:49:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3785,
                    "nodeType": "StructuredDocumentation",
                    "src": "117895:735:0",
                    "text": "@dev    Instantiates a Pool. \n@dev    It emits a `PoolCreated` event. \n@param  liquidityAsset The asset escrowed in a LiquidityLocker.\n@param  stakeAsset     The asset escrowed in a StakeLocker.\n@param  slFactory      The factory to instantiate a StakeLocker from.\n@param  llFactory      The factory to instantiate a LiquidityLocker from.\n@param  stakingFee     The fee that Stakers earn on interest, in basis points.\n@param  delegateFee    The fee that the Pool Delegate earns on interest, in basis points.\n@param  liquidityCap   The amount of Liquidity Asset accepted by the Pool.\n@return poolAddress    The address of the instantiated Pool."
                  },
                  "functionSelector": "312b8982",
                  "id": 3804,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3800,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3787,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118664:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3786,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "118664:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3789,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118696:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3788,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "118696:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3791,
                        "mutability": "mutable",
                        "name": "slFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118724:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3790,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "118724:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3793,
                        "mutability": "mutable",
                        "name": "llFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118751:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3792,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "118751:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3795,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118778:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3794,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "118778:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3797,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118806:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3796,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "118806:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3799,
                        "mutability": "mutable",
                        "name": "liquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118835:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3798,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "118835:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "118654:207:0"
                  },
                  "returnParameters": {
                    "id": 3803,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3802,
                        "mutability": "mutable",
                        "name": "poolAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118880:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3801,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "118880:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "118879:21:0"
                  },
                  "scope": 3821,
                  "src": "118635:266:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3805,
                    "nodeType": "StructuredDocumentation",
                    "src": "118907:356:0",
                    "text": "@dev   Sets a PoolFactory Admin. \n@dev   Only the Governor can call this function. \n@dev   It emits a `PoolFactoryAdminSet` event. \n@param poolFactoryAdmin An address being allowed or disallowed as a PoolFactory Admin.\n@param allowed          Whether `poolFactoryAdmin` is allowed as a PoolFactory Admin."
                  },
                  "functionSelector": "f3f616c0",
                  "id": 3812,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolFactoryAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3810,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3807,
                        "mutability": "mutable",
                        "name": "poolFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3812,
                        "src": "119297:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3806,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "119297:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3809,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3812,
                        "src": "119323:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3808,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "119323:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "119296:40:0"
                  },
                  "returnParameters": {
                    "id": 3811,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "119345:0:0"
                  },
                  "scope": 3821,
                  "src": "119268:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3813,
                    "nodeType": "StructuredDocumentation",
                    "src": "119352:184:0",
                    "text": "@dev Triggers paused state. \n@dev Halts functionality for certain functions. \n@dev Only the Governor or a PoolFactory Admin can call this function. "
                  },
                  "functionSelector": "8456cb59",
                  "id": 3816,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3814,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "119555:2:0"
                  },
                  "returnParameters": {
                    "id": 3815,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "119566:0:0"
                  },
                  "scope": 3821,
                  "src": "119541:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3817,
                    "nodeType": "StructuredDocumentation",
                    "src": "119573:189:0",
                    "text": "@dev Triggers unpaused state. \n@dev Restores functionality for certain functions. \n@dev Only the Governor or a PoolFactory Admin can call this function. "
                  },
                  "functionSelector": "3f4ba83a",
                  "id": 3820,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3818,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "119783:2:0"
                  },
                  "returnParameters": {
                    "id": 3819,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "119794:0:0"
                  },
                  "scope": 3821,
                  "src": "119767:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "114981:4817:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3823,
                    "name": "IExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2006,
                    "src": "120231:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExtendedFDT_$2006",
                      "typeString": "contract IExtendedFDT"
                    }
                  },
                  "id": 3824,
                  "nodeType": "InheritanceSpecifier",
                  "src": "120231:12:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                2006
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 3822,
                "nodeType": "StructuredDocumentation",
                "src": "120112:90:0",
                "text": "@title StakeLockerFDT inherits ExtendedFDT and accounts for gains/losses for Stakers."
              },
              "fullyImplemented": false,
              "id": 3849,
              "linearizedBaseContracts": [
                3849,
                2006,
                141,
                77
              ],
              "name": "IStakeLockerFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 3825,
                    "nodeType": "StructuredDocumentation",
                    "src": "120251:50:0",
                    "text": "@dev The ERC-2222 Funds Token."
                  },
                  "functionSelector": "63f04b15",
                  "id": 3830,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3826,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "120325:2:0"
                  },
                  "returnParameters": {
                    "id": 3829,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3828,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3830,
                        "src": "120351:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3827,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "120351:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "120350:8:0"
                  },
                  "scope": 3849,
                  "src": "120306:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3831,
                    "nodeType": "StructuredDocumentation",
                    "src": "120365:60:0",
                    "text": "@dev The sum of all unrecognized losses."
                  },
                  "functionSelector": "aedc78c3",
                  "id": 3836,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bptLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3832,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "120448:2:0"
                  },
                  "returnParameters": {
                    "id": 3835,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3834,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3836,
                        "src": "120474:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3833,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "120474:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "120473:9:0"
                  },
                  "scope": 3849,
                  "src": "120430:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3837,
                    "nodeType": "StructuredDocumentation",
                    "src": "120489:89:0",
                    "text": "@dev The amount of losses present and accounted for in this contract."
                  },
                  "functionSelector": "fec984e3",
                  "id": 3842,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3838,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "120605:2:0"
                  },
                  "returnParameters": {
                    "id": 3841,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3840,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3842,
                        "src": "120631:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3839,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "120631:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "120630:9:0"
                  },
                  "scope": 3849,
                  "src": "120583:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3843,
                    "nodeType": "StructuredDocumentation",
                    "src": "120646:123:0",
                    "text": "@dev The amount of `fundsToken` (Liquidity Asset) currently present and accounted for in this contract."
                  },
                  "functionSelector": "a9691f3f",
                  "id": 3848,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3844,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "120800:2:0"
                  },
                  "returnParameters": {
                    "id": 3847,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3846,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3848,
                        "src": "120826:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3845,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "120826:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "120825:9:0"
                  },
                  "scope": 3849,
                  "src": "120774:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "120202:636:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3851,
                    "name": "IStakeLockerFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3849,
                    "src": "121243:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IStakeLockerFDT_$3849",
                      "typeString": "contract IStakeLockerFDT"
                    }
                  },
                  "id": 3852,
                  "nodeType": "InheritanceSpecifier",
                  "src": "121243:15:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                2006,
                3849
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 3850,
                "nodeType": "StructuredDocumentation",
                "src": "121109:108:0",
                "text": "@title StakeLocker holds custody of stakeAsset tokens for a given Pool and earns revenue from interest."
              },
              "fullyImplemented": false,
              "id": 4104,
              "linearizedBaseContracts": [
                4104,
                3849,
                2006,
                141,
                77
              ],
              "name": "IStakeLocker",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3853,
                    "nodeType": "StructuredDocumentation",
                    "src": "121266:101:0",
                    "text": "@dev   Emits an event indicating that the Stake Locker is now open to the public."
                  },
                  "id": 3855,
                  "name": "StakeLockerOpened",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3854,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "121395:2:0"
                  },
                  "src": "121372:26:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3856,
                    "nodeType": "StructuredDocumentation",
                    "src": "121404: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": 3864,
                  "name": "BalanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3863,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3858,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3864,
                        "src": "121700:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3857,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "121700:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3860,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3864,
                        "src": "121724:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3859,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "121724:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3862,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3864,
                        "src": "121747:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3861,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "121747:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "121699:64:0"
                  },
                  "src": "121679:85:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3865,
                    "nodeType": "StructuredDocumentation",
                    "src": "121770: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": 3871,
                  "name": "AllowListUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3870,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3867,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3871,
                        "src": "122083:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3866,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "122083:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3869,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3871,
                        "src": "122107:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3868,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "122107:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122082:37:0"
                  },
                  "src": "122060:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3872,
                    "nodeType": "StructuredDocumentation",
                    "src": "122126: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": 3878,
                  "name": "StakeDateUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3877,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3874,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3878,
                        "src": "122363:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3873,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "122363:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3876,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3878,
                        "src": "122387:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3875,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "122387:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122362:43:0"
                  },
                  "src": "122340:66:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3879,
                    "nodeType": "StructuredDocumentation",
                    "src": "122412:151:0",
                    "text": "@dev   Emits an event indicating that the stake lockup period has changed.\n@param lockupPeriod The new stake lockup period."
                  },
                  "id": 3883,
                  "name": "LockupPeriodUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3882,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3881,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "lockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3883,
                        "src": "122594:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3880,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "122594:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122593:22:0"
                  },
                  "src": "122568:48:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3884,
                    "nodeType": "StructuredDocumentation",
                    "src": "122622: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": 3890,
                  "name": "Cooldown",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3889,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3886,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3890,
                        "src": "122862:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3885,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "122862:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3888,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "cooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3890,
                        "src": "122886:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3887,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "122886:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122861:42:0"
                  },
                  "src": "122847:57:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3891,
                    "nodeType": "StructuredDocumentation",
                    "src": "122910: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": 3897,
                  "name": "Stake",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3896,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3893,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3897,
                        "src": "123137:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3892,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123137:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3895,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3897,
                        "src": "123161:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3894,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "123161:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "123136:40:0"
                  },
                  "src": "123125:52:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3898,
                    "nodeType": "StructuredDocumentation",
                    "src": "123183: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": 3904,
                  "name": "Unstake",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3903,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3900,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3904,
                        "src": "123407:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3899,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123407:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3902,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3904,
                        "src": "123431:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3901,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "123431:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "123406:40:0"
                  },
                  "src": "123393:54:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3905,
                    "nodeType": "StructuredDocumentation",
                    "src": "123453: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": 3915,
                  "name": "CustodyTransfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3914,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3907,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3915,
                        "src": "123911:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3906,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123911:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3909,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3915,
                        "src": "123938:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3908,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123938:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3911,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3915,
                        "src": "123960:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3910,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123960:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3913,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3915,
                        "src": "123980:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3912,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "123980:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "123910:85:0"
                  },
                  "src": "123889:107:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3916,
                    "nodeType": "StructuredDocumentation",
                    "src": "124002: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": 3926,
                  "name": "CustodyAllowanceChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3925,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3918,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3926,
                        "src": "124504:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3917,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "124504:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3920,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3926,
                        "src": "124528:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3919,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "124528:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3922,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oldAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3926,
                        "src": "124555:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3921,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "124555:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3924,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3926,
                        "src": "124577:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3923,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "124577:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "124503:95:0"
                  },
                  "src": "124474:125:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3927,
                    "nodeType": "StructuredDocumentation",
                    "src": "124605: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": 3933,
                  "name": "TotalCustodyAllowanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3932,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3929,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3933,
                        "src": "124984:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3928,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "124984:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3931,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newTotalAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3933,
                        "src": "125008:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3930,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "125008:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "124983:51:0"
                  },
                  "src": "124949:86:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3934,
                    "nodeType": "StructuredDocumentation",
                    "src": "125041:108:0",
                    "text": "@dev The asset deposited by Stakers into this contract, for liquidation during defaults."
                  },
                  "functionSelector": "80cd916d",
                  "id": 3939,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3935,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125173:2:0"
                  },
                  "returnParameters": {
                    "id": 3938,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3937,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3939,
                        "src": "125199:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3936,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "125199:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125198:8:0"
                  },
                  "scope": 4104,
                  "src": "125154:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3940,
                    "nodeType": "StructuredDocumentation",
                    "src": "125213:116:0",
                    "text": "@dev The Liquidity Asset for the Pool as well as the dividend token for StakeLockerFDT interest."
                  },
                  "functionSelector": "209b2bca",
                  "id": 3945,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3941,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125357:2:0"
                  },
                  "returnParameters": {
                    "id": 3944,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3943,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3945,
                        "src": "125383:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3942,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "125383:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125382:9:0"
                  },
                  "scope": 4104,
                  "src": "125334:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3946,
                    "nodeType": "StructuredDocumentation",
                    "src": "125398:41:0",
                    "text": "@dev The parent Pool."
                  },
                  "functionSelector": "16f0115b",
                  "id": 3951,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3947,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125457:2:0"
                  },
                  "returnParameters": {
                    "id": 3950,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3949,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3951,
                        "src": "125483:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3948,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "125483:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125482:9:0"
                  },
                  "scope": 4104,
                  "src": "125444:48:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3952,
                    "nodeType": "StructuredDocumentation",
                    "src": "125498:82:0",
                    "text": "@dev The number of seconds for which unstaking is not allowed."
                  },
                  "functionSelector": "ee947a7c",
                  "id": 3957,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3953,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125606:2:0"
                  },
                  "returnParameters": {
                    "id": 3956,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3955,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3957,
                        "src": "125632:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3954,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "125632:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125631:9:0"
                  },
                  "scope": 4104,
                  "src": "125585:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3958,
                    "nodeType": "StructuredDocumentation",
                    "src": "125647:115:0",
                    "text": "@param  account The address of a Staker.\n@return The effective stake date of `account`."
                  },
                  "functionSelector": "5190bbaf",
                  "id": 3965,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeDate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3961,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3960,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3965,
                        "src": "125786:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3959,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "125786:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125785:17:0"
                  },
                  "returnParameters": {
                    "id": 3964,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3963,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3965,
                        "src": "125821:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3962,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "125821:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125820:9:0"
                  },
                  "scope": 4104,
                  "src": "125767:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3966,
                    "nodeType": "StructuredDocumentation",
                    "src": "125836:129:0",
                    "text": "@param  account The address of a Staker.\n@return The timestamp of when `account` called `cooldown()`."
                  },
                  "functionSelector": "ff887130",
                  "id": 3973,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unstakeCooldown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3969,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3968,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3973,
                        "src": "125995:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3967,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "125995:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125994:17:0"
                  },
                  "returnParameters": {
                    "id": 3972,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3971,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3973,
                        "src": "126035:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3970,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "126035:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126034:9:0"
                  },
                  "scope": 4104,
                  "src": "125970:74:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3974,
                    "nodeType": "StructuredDocumentation",
                    "src": "126050:106:0",
                    "text": "@param  account The address of a Staker.\n@return Whether `account` is allowed."
                  },
                  "functionSelector": "d63a8e11",
                  "id": 3981,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3977,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3976,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3981,
                        "src": "126178:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3975,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126178:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126177:17:0"
                  },
                  "returnParameters": {
                    "id": 3980,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3979,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3981,
                        "src": "126218:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3978,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "126218:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126217:6:0"
                  },
                  "scope": 4104,
                  "src": "126161:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3982,
                    "nodeType": "StructuredDocumentation",
                    "src": "126230: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": 3991,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "custodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3987,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3984,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3991,
                        "src": "126472:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3983,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126472:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3986,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3991,
                        "src": "126489:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3985,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126489:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126471:36:0"
                  },
                  "returnParameters": {
                    "id": 3990,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3989,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3991,
                        "src": "126531:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3988,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "126531:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126530:9:0"
                  },
                  "scope": 4104,
                  "src": "126446:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3992,
                    "nodeType": "StructuredDocumentation",
                    "src": "126546: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": 3999,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3995,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3994,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3999,
                        "src": "126769:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3993,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126769:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126768:17:0"
                  },
                  "returnParameters": {
                    "id": 3998,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3997,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3999,
                        "src": "126809:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3996,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "126809:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126808:9:0"
                  },
                  "scope": 4104,
                  "src": "126738:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "1831ccf2",
                  "id": 4004,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4000,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "126845:2:0"
                  },
                  "returnParameters": {
                    "id": 4003,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4002,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4004,
                        "src": "126871:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4001,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "126871:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126870:6:0"
                  },
                  "scope": 4104,
                  "src": "126824:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4005,
                    "nodeType": "StructuredDocumentation",
                    "src": "126883: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": 4012,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setAllowlist",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4010,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4007,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4012,
                        "src": "127222:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4006,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "127222:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4009,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4012,
                        "src": "127238:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4008,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "127238:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "127221:29:0"
                  },
                  "returnParameters": {
                    "id": 4011,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "127259:0:0"
                  },
                  "scope": 4104,
                  "src": "127200:60:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4013,
                    "nodeType": "StructuredDocumentation",
                    "src": "127266: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": 4016,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openStakeLockerToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4014,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "127485:2:0"
                  },
                  "returnParameters": {
                    "id": 4015,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "127496:0:0"
                  },
                  "scope": 4104,
                  "src": "127453:44:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4017,
                    "nodeType": "StructuredDocumentation",
                    "src": "127503: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": 4022,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4020,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4019,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4022,
                        "src": "127780:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4018,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "127780:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "127779:25:0"
                  },
                  "returnParameters": {
                    "id": 4021,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "127813:0:0"
                  },
                  "scope": 4104,
                  "src": "127755:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4023,
                    "nodeType": "StructuredDocumentation",
                    "src": "127820: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": 4030,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pull",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4028,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4025,
                        "mutability": "mutable",
                        "name": "dst",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4030,
                        "src": "128102:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4024,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "128102:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4027,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4030,
                        "src": "128115:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4026,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "128115:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "128101:26:0"
                  },
                  "returnParameters": {
                    "id": 4029,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "128136:0:0"
                  },
                  "scope": 4104,
                  "src": "128088:49:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4031,
                    "nodeType": "StructuredDocumentation",
                    "src": "128143: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": 4036,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4034,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4033,
                        "mutability": "mutable",
                        "name": "bptsBurned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4036,
                        "src": "128392:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4032,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "128392:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "128391:20:0"
                  },
                  "returnParameters": {
                    "id": 4035,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "128420:0:0"
                  },
                  "scope": 4104,
                  "src": "128370:51:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4037,
                    "nodeType": "StructuredDocumentation",
                    "src": "128427: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": 4042,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4040,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4039,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4042,
                        "src": "128818:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4038,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "128818:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "128817:13:0"
                  },
                  "returnParameters": {
                    "id": 4041,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "128839:0:0"
                  },
                  "scope": 4104,
                  "src": "128803:37:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4043,
                    "nodeType": "StructuredDocumentation",
                    "src": "128846: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": 4046,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "intendToUnstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4044,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129049:2:0"
                  },
                  "returnParameters": {
                    "id": 4045,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129060:0:0"
                  },
                  "scope": 4104,
                  "src": "129025:36:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4047,
                    "nodeType": "StructuredDocumentation",
                    "src": "129067: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": 4050,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelUnstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4048,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129244:2:0"
                  },
                  "returnParameters": {
                    "id": 4049,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129255:0:0"
                  },
                  "scope": 4104,
                  "src": "129222:34:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4051,
                    "nodeType": "StructuredDocumentation",
                    "src": "129262: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": 4056,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4054,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4053,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4056,
                        "src": "129641:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4052,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "129641:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "129640:13:0"
                  },
                  "returnParameters": {
                    "id": 4055,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129662:0:0"
                  },
                  "scope": 4104,
                  "src": "129624:39:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": null,
                  "documentation": {
                    "id": 4057,
                    "nodeType": "StructuredDocumentation",
                    "src": "129669: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": 4061,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4059,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "129891:8:0"
                  },
                  "parameters": {
                    "id": 4058,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129879:2:0"
                  },
                  "returnParameters": {
                    "id": 4060,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129899:0:0"
                  },
                  "scope": 4104,
                  "src": "129857:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4062,
                    "nodeType": "StructuredDocumentation",
                    "src": "129910: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": 4069,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4067,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4064,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4069,
                        "src": "130385:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4063,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "130385:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4066,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4069,
                        "src": "130404:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4065,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "130404:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "130384:35:0"
                  },
                  "returnParameters": {
                    "id": 4068,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "130428:0:0"
                  },
                  "scope": 4104,
                  "src": "130351:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4070,
                    "nodeType": "StructuredDocumentation",
                    "src": "130435: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": 4079,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4077,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4072,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4079,
                        "src": "131161:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4071,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "131161:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4074,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4079,
                        "src": "131175:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4073,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "131175:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4076,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4079,
                        "src": "131187:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4075,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "131187:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "131160:42:0"
                  },
                  "returnParameters": {
                    "id": 4078,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "131211:0:0"
                  },
                  "scope": 4104,
                  "src": "131132:80:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4080,
                    "nodeType": "StructuredDocumentation",
                    "src": "131218: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": 4083,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4081,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "131419:2:0"
                  },
                  "returnParameters": {
                    "id": 4082,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "131430:0:0"
                  },
                  "scope": 4104,
                  "src": "131405:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4084,
                    "nodeType": "StructuredDocumentation",
                    "src": "131437: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": 4087,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4085,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "131644:2:0"
                  },
                  "returnParameters": {
                    "id": 4086,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "131655:0:0"
                  },
                  "scope": 4104,
                  "src": "131628:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4088,
                    "nodeType": "StructuredDocumentation",
                    "src": "131662: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": 4095,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isUnstakeAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4091,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4090,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4095,
                        "src": "131823:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4089,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "131823:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "131822:14:0"
                  },
                  "returnParameters": {
                    "id": 4094,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4093,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4095,
                        "src": "131860:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4092,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "131860:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "131859:6:0"
                  },
                  "scope": 4104,
                  "src": "131797:69:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4096,
                    "nodeType": "StructuredDocumentation",
                    "src": "131872: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": 4103,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isReceiveAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4099,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4098,
                        "mutability": "mutable",
                        "name": "_unstakeCooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4103,
                        "src": "132086:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4097,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "132086:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "132085:26:0"
                  },
                  "returnParameters": {
                    "id": 4102,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4101,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4103,
                        "src": "132135:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4100,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "132135:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "132134:6:0"
                  },
                  "scope": 4104,
                  "src": "132060:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "121217:10927:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 4106,
                    "name": "ISubFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 596,
                    "src": "132428:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISubFactory_$596",
                      "typeString": "contract ISubFactory"
                    }
                  },
                  "id": 4107,
                  "nodeType": "InheritanceSpecifier",
                  "src": "132428:11:0"
                }
              ],
              "contractDependencies": [
                596
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 4105,
                "nodeType": "StructuredDocumentation",
                "src": "132338:57:0",
                "text": "@title StakeLockerFactory instantiates StakeLockers."
              },
              "fullyImplemented": false,
              "id": 4156,
              "linearizedBaseContracts": [
                4156,
                596
              ],
              "name": "IStakeLockerFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 4108,
                    "nodeType": "StructuredDocumentation",
                    "src": "132447:496:0",
                    "text": "@dev   Emits an event indicating a StakeLocker was created.\n@param owner          The owner of the StakeLocker.\n@param stakeLocker    The address of the StakeLocker.\n@param stakeAsset     The Stake Asset this StakeLocker will escrow.\n@param liquidityAsset The address of the Liquidity Asset (as defined in the Pool).\n@param name           The name of the StakeLockerFDTs.\n@param symbol         The symbol of the StakeLockerFDTs."
                  },
                  "id": 4122,
                  "name": "StakeLockerCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4121,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4110,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "132982:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4109,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "132982:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4112,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "133013:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4111,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133013:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4114,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "133042:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4113,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133042:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4116,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "133070:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4115,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133070:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4118,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "133102:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4117,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "133102:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4120,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "133123:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4119,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "133123:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "132972:170:0"
                  },
                  "src": "132948:195:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4123,
                    "nodeType": "StructuredDocumentation",
                    "src": "133149:143:0",
                    "text": "@param  stakeLocker The address of a StakeLocker.\n@return The address of the owner of StakeLocker at `stakeLocker`."
                  },
                  "functionSelector": "666e1b39",
                  "id": 4130,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4126,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4125,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4130,
                        "src": "133312:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4124,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133312:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "133311:21:0"
                  },
                  "returnParameters": {
                    "id": 4129,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4128,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4130,
                        "src": "133351:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4127,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133351:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "133350:9:0"
                  },
                  "scope": 4156,
                  "src": "133297:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4131,
                    "nodeType": "StructuredDocumentation",
                    "src": "133366:109:0",
                    "text": "@param  stakeLocker Some address.\n@return Whether `stakeLocker` is a StakeLocker."
                  },
                  "functionSelector": "2ec63d7c",
                  "id": 4138,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4134,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4133,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4138,
                        "src": "133498:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4132,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133498:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "133497:21:0"
                  },
                  "returnParameters": {
                    "id": 4137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4136,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4138,
                        "src": "133537:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4135,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "133537:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "133536:6:0"
                  },
                  "scope": 4156,
                  "src": "133480:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    595
                  ],
                  "body": null,
                  "documentation": {
                    "id": 4139,
                    "nodeType": "StructuredDocumentation",
                    "src": "133549:89:0",
                    "text": "@dev The type of the factory (i.e FactoryType::STAKE_LOCKER_FACTORY)."
                  },
                  "functionSelector": "64e1fd55",
                  "id": 4145,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryType",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4141,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "133675:8:0"
                  },
                  "parameters": {
                    "id": 4140,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "133663:2:0"
                  },
                  "returnParameters": {
                    "id": 4144,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4143,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4145,
                        "src": "133698:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4142,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "133698:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "133697:7:0"
                  },
                  "scope": 4156,
                  "src": "133643:62:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4146,
                    "nodeType": "StructuredDocumentation",
                    "src": "133711:371:0",
                    "text": "@dev    Instantiate a StakeLocker.\n@dev    It emits a `StakeLockerCreated` event.\n@param  stakeAsset     The address of the Stake Asset (generally Balancer Pool BPTs).\n@param  liquidityAsset The address of the Liquidity Asset (as defined in the Pool).\n@return stakeLocker    The address of the instantiated StakeLocker."
                  },
                  "functionSelector": "85de067e",
                  "id": 4155,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "newLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4151,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4148,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4155,
                        "src": "134106:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4147,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134106:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4150,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4155,
                        "src": "134126:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4149,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134126:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134105:44:0"
                  },
                  "returnParameters": {
                    "id": 4154,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4153,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4155,
                        "src": "134168:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4152,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134168:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134167:21:0"
                  },
                  "scope": 4156,
                  "src": "134087:102:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "132395:1797:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 4312,
              "linearizedBaseContracts": [
                4312
              ],
              "name": "IBPool",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "a9059cbb",
                  "id": 4165,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4161,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4158,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4165,
                        "src": "134315:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4157,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134315:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4160,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4165,
                        "src": "134324:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4159,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134324:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134314:18:0"
                  },
                  "returnParameters": {
                    "id": 4164,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4163,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4165,
                        "src": "134351:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4162,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "134351:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134350:6:0"
                  },
                  "scope": 4312,
                  "src": "134297:60:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "9381cd2b",
                  "id": 4170,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "INIT_POOL_SUPPLY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4166,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134388:2:0"
                  },
                  "returnParameters": {
                    "id": 4169,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4168,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4170,
                        "src": "134414:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4167,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134414:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134413:9:0"
                  },
                  "scope": 4312,
                  "src": "134363:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "992e2a92",
                  "id": 4175,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "MAX_OUT_RATIO",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4171,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134451:2:0"
                  },
                  "returnParameters": {
                    "id": 4174,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4173,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4175,
                        "src": "134477:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4172,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134477:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134476:9:0"
                  },
                  "scope": 4312,
                  "src": "134429:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "e4e1e538",
                  "id": 4184,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bind",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4182,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4177,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4184,
                        "src": "134506:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4176,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134506:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4179,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4184,
                        "src": "134515:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4178,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134515:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4181,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4184,
                        "src": "134524:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4180,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134524:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134505:27:0"
                  },
                  "returnParameters": {
                    "id": 4183,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134541:0:0"
                  },
                  "scope": 4312,
                  "src": "134492:50:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "70a08231",
                  "id": 4191,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4187,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4186,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4191,
                        "src": "134567:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4185,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134567:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134566:9:0"
                  },
                  "returnParameters": {
                    "id": 4190,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4189,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4191,
                        "src": "134599:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4188,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134599:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134598:9:0"
                  },
                  "scope": 4312,
                  "src": "134548:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "4bb278f3",
                  "id": 4194,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "finalize",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4192,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134631:2:0"
                  },
                  "returnParameters": {
                    "id": 4193,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134642:0:0"
                  },
                  "scope": 4312,
                  "src": "134614:29:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "8c28cbe8",
                  "id": 4199,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "gulp",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4197,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4196,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4199,
                        "src": "134663:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4195,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134663:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134662:9:0"
                  },
                  "returnParameters": {
                    "id": 4198,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134680:0:0"
                  },
                  "scope": 4312,
                  "src": "134649:32:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "8d4e4083",
                  "id": 4204,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isFinalized",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4200,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134707:2:0"
                  },
                  "returnParameters": {
                    "id": 4203,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4202,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4204,
                        "src": "134733:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4201,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "134733:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134732:6:0"
                  },
                  "scope": 4312,
                  "src": "134687:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "2f37b624",
                  "id": 4211,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isBound",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4207,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4206,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4211,
                        "src": "134762:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4205,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134762:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134761:9:0"
                  },
                  "returnParameters": {
                    "id": 4210,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4209,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4211,
                        "src": "134794:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4208,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "134794:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134793:6:0"
                  },
                  "scope": 4312,
                  "src": "134745:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "cd2ed8fb",
                  "id": 4216,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getNumTokens",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4212,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134827:2:0"
                  },
                  "returnParameters": {
                    "id": 4215,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4214,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4216,
                        "src": "134853:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4213,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134853:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134852:9:0"
                  },
                  "scope": 4312,
                  "src": "134806:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "f8b2cb4f",
                  "id": 4223,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4219,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4218,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4223,
                        "src": "134888:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4217,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134888:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134887:9:0"
                  },
                  "returnParameters": {
                    "id": 4222,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4221,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4223,
                        "src": "134920:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4220,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134920:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134919:9:0"
                  },
                  "scope": 4312,
                  "src": "134868:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "f1b8a9b7",
                  "id": 4230,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getNormalizedWeight",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4226,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4225,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4230,
                        "src": "134964:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4224,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134964:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134963:9:0"
                  },
                  "returnParameters": {
                    "id": 4229,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4228,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4230,
                        "src": "134996:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4227,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134996:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134995:9:0"
                  },
                  "scope": 4312,
                  "src": "134935:70:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "948d8ce6",
                  "id": 4237,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getDenormalizedWeight",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4233,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4232,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4237,
                        "src": "135042:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4231,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "135042:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135041:9:0"
                  },
                  "returnParameters": {
                    "id": 4236,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4235,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4237,
                        "src": "135074:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4234,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135074:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135073:9:0"
                  },
                  "scope": 4312,
                  "src": "135011:72:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "936c3477",
                  "id": 4242,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTotalDenormalizedWeight",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4238,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "135124:2:0"
                  },
                  "returnParameters": {
                    "id": 4241,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4240,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4242,
                        "src": "135150:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4239,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135150:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135149:9:0"
                  },
                  "scope": 4312,
                  "src": "135089:70:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "d4cadf68",
                  "id": 4247,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSwapFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4243,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "135184:2:0"
                  },
                  "returnParameters": {
                    "id": 4246,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4245,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4247,
                        "src": "135210:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4244,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135210:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135209:9:0"
                  },
                  "scope": 4312,
                  "src": "135165:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "18160ddd",
                  "id": 4252,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4248,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "135245:2:0"
                  },
                  "returnParameters": {
                    "id": 4251,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4250,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4252,
                        "src": "135271:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4249,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135271:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135270:9:0"
                  },
                  "scope": 4312,
                  "src": "135225:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "be3bbd2e",
                  "id": 4258,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getFinalTokens",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4253,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "135309:2:0"
                  },
                  "returnParameters": {
                    "id": 4257,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4256,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4258,
                        "src": "135335:16:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4254,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "135335:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 4255,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "135335:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135334:18:0"
                  },
                  "scope": 4312,
                  "src": "135286:67:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "4f69c0d4",
                  "id": 4266,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "joinPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4264,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4260,
                        "mutability": "mutable",
                        "name": "poolAmountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4266,
                        "src": "135377:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4259,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "135377:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4263,
                        "mutability": "mutable",
                        "name": "maxAmountsIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4266,
                        "src": "135397:28:0",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4261,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "135397:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4262,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "135397:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135376:50:0"
                  },
                  "returnParameters": {
                    "id": 4265,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "135435:0:0"
                  },
                  "scope": 4312,
                  "src": "135359:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "89298012",
                  "id": 4283,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "calcSingleOutGivenPoolIn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4279,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4268,
                        "mutability": "mutable",
                        "name": "tokenBalanceOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135485:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4267,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135485:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4270,
                        "mutability": "mutable",
                        "name": "tokenWeightOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135518:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4269,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135518:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4272,
                        "mutability": "mutable",
                        "name": "poolSupply",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135550:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4271,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135550:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4274,
                        "mutability": "mutable",
                        "name": "totalWeight",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135578:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4273,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135578:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4276,
                        "mutability": "mutable",
                        "name": "poolAmountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135607:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4275,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135607:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4278,
                        "mutability": "mutable",
                        "name": "swapFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135637:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4277,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135637:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135475:183:0"
                  },
                  "returnParameters": {
                    "id": 4282,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4281,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135682:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4280,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135682:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135681:9:0"
                  },
                  "scope": 4312,
                  "src": "135442:249:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "82f652ad",
                  "id": 4300,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "calcPoolInGivenSingleOut",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4296,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4285,
                        "mutability": "mutable",
                        "name": "tokenBalanceOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135740:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4284,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135740:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4287,
                        "mutability": "mutable",
                        "name": "tokenWeightOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135773:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4286,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135773:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4289,
                        "mutability": "mutable",
                        "name": "poolSupply",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135805:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4288,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135805:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4291,
                        "mutability": "mutable",
                        "name": "totalWeight",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135833:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4290,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135833:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4293,
                        "mutability": "mutable",
                        "name": "tokenAmountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135862:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4292,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135862:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4295,
                        "mutability": "mutable",
                        "name": "swapFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135894:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4294,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135894:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135730:185:0"
                  },
                  "returnParameters": {
                    "id": 4299,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4298,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135939:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4297,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135939:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135938:9:0"
                  },
                  "scope": 4312,
                  "src": "135697:251:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "02c96748",
                  "id": 4311,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exitswapExternAmountOut",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4307,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4302,
                        "mutability": "mutable",
                        "name": "tokenOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4311,
                        "src": "135996:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4301,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "135996:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4304,
                        "mutability": "mutable",
                        "name": "tokenAmountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4311,
                        "src": "136022:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4303,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "136022:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4306,
                        "mutability": "mutable",
                        "name": "maxPoolAmountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4311,
                        "src": "136054:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4305,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "136054:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135986:97:0"
                  },
                  "returnParameters": {
                    "id": 4310,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4309,
                        "mutability": "mutable",
                        "name": "poolAmountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4311,
                        "src": "136102:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4308,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "136102:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "136101:22:0"
                  },
                  "scope": 4312,
                  "src": "135954:170:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "134273:1854:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 4313,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "136341:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 4314,
                  "nodeType": "InheritanceSpecifier",
                  "src": "136341:6:0"
                }
              ],
              "contractDependencies": [
                77
              ],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 4330,
              "linearizedBaseContracts": [
                4330,
                77
              ],
              "name": "IERC20Details",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "06fdde03",
                  "id": 4319,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4315,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "136368:2:0"
                  },
                  "returnParameters": {
                    "id": 4318,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4317,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4319,
                        "src": "136394:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4316,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "136394:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "136393:15:0"
                  },
                  "scope": 4330,
                  "src": "136355:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "95d89b41",
                  "id": 4324,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4320,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "136430:2:0"
                  },
                  "returnParameters": {
                    "id": 4323,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4322,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4324,
                        "src": "136456:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4321,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "136456:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "136455:15:0"
                  },
                  "scope": 4330,
                  "src": "136415:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "313ce567",
                  "id": 4329,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4325,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "136494:2:0"
                  },
                  "returnParameters": {
                    "id": 4328,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4327,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4329,
                        "src": "136520:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4326,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "136520:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "136519:9:0"
                  },
                  "scope": 4330,
                  "src": "136477:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7393,
              "src": "136314:218:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4331,
                "nodeType": "StructuredDocumentation",
                "src": "136635:67:0",
                "text": " @dev Collection of functions related to the address type"
              },
              "fullyImplemented": true,
              "id": 4572,
              "linearizedBaseContracts": [
                4572
              ],
              "name": "Address",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4347,
                    "nodeType": "Block",
                    "src": "137361:347:0",
                    "statements": [
                      {
                        "assignments": [
                          4340
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4340,
                            "mutability": "mutable",
                            "name": "size",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4347,
                            "src": "137558:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4339,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "137558:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4341,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "137558:12:0"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "137645:32:0",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "137647:28:0",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "account",
                                    "nodeType": "YulIdentifier",
                                    "src": "137667:7:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "extcodesize",
                                  "nodeType": "YulIdentifier",
                                  "src": "137655:11:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "137655:20:0"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "137647:4:0"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 4334,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "137667:7:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4340,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "137647:4:0",
                            "valueSize": 1
                          }
                        ],
                        "id": 4342,
                        "nodeType": "InlineAssembly",
                        "src": "137636:41:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4343,
                            "name": "size",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4340,
                            "src": "137693:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "137700:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "137693:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4338,
                        "id": 4346,
                        "nodeType": "Return",
                        "src": "137686:15:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4332,
                    "nodeType": "StructuredDocumentation",
                    "src": "136725:565:0",
                    "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ===="
                  },
                  "id": 4348,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isContract",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4335,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4334,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4348,
                        "src": "137315:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4333,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "137315:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "137314:17:0"
                  },
                  "returnParameters": {
                    "id": 4338,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4337,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4348,
                        "src": "137355:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4336,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "137355:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "137354:6:0"
                  },
                  "scope": 4572,
                  "src": "137295:413:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4381,
                    "nodeType": "Block",
                    "src": "138696:320:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4359,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "138722:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$4572",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$4572",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 4358,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "138714:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4357,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "138714:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4360,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "138714:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 4361,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "138714:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4362,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4353,
                                "src": "138739:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "138714:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
                              "id": 4364,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "138747:31:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              },
                              "value": "Address: insufficient balance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              }
                            ],
                            "id": 4356,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "138706:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "138706:73:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4366,
                        "nodeType": "ExpressionStatement",
                        "src": "138706:73:0"
                      },
                      {
                        "assignments": [
                          4368,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4368,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4381,
                            "src": "138868:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4367,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "138868:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 4375,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 4373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "138918:2:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4369,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4351,
                                "src": "138886:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 4370,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "138886:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 4372,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "argumentTypes": null,
                                "id": 4371,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4353,
                                "src": "138909:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "138886:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "138886:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "138867:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4377,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4368,
                              "src": "138939:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
                              "id": 4378,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "138948:60:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              },
                              "value": "Address: unable to send value, recipient may have reverted"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              }
                            ],
                            "id": 4376,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "138931:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "138931:78:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4380,
                        "nodeType": "ExpressionStatement",
                        "src": "138931:78:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4349,
                    "nodeType": "StructuredDocumentation",
                    "src": "137714:906:0",
                    "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
                  },
                  "id": 4382,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sendValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4354,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4351,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4382,
                        "src": "138644:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 4350,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "138644:15:0",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4353,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4382,
                        "src": "138671:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4352,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "138671:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "138643:43:0"
                  },
                  "returnParameters": {
                    "id": 4355,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "138696:0:0"
                  },
                  "scope": 4572,
                  "src": "138625:391:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4398,
                    "nodeType": "Block",
                    "src": "139846:82:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4393,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4385,
                              "src": "139874:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4394,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4387,
                              "src": "139882:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 4395,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "139888:32:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              },
                              "value": "Address: low-level call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              }
                            ],
                            "id": 4392,
                            "name": "functionCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4399,
                              4419
                            ],
                            "referencedDeclaration": 4419,
                            "src": "139861:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 4396,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "139861:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4391,
                        "id": 4397,
                        "nodeType": "Return",
                        "src": "139854:67:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4383,
                    "nodeType": "StructuredDocumentation",
                    "src": "139022:730:0",
                    "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain`call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
                  },
                  "id": 4399,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4388,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4385,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4399,
                        "src": "139779:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4384,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "139779:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4387,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4399,
                        "src": "139795:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4386,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "139795:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "139778:35:0"
                  },
                  "returnParameters": {
                    "id": 4391,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4390,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4399,
                        "src": "139832:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4389,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "139832:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "139831:14:0"
                  },
                  "scope": 4572,
                  "src": "139757:171:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4418,
                    "nodeType": "Block",
                    "src": "140267:76:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4412,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4402,
                              "src": "140306:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4413,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4404,
                              "src": "140314:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4414,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "140320:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 4415,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4406,
                              "src": "140323:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4411,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4439,
                              4489
                            ],
                            "referencedDeclaration": 4489,
                            "src": "140284:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 4416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "140284:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4410,
                        "id": 4417,
                        "nodeType": "Return",
                        "src": "140277:59:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4400,
                    "nodeType": "StructuredDocumentation",
                    "src": "139934:211:0",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 4419,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4407,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4402,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4419,
                        "src": "140172:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4401,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "140172:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4404,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4419,
                        "src": "140188:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4403,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "140188:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4406,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4419,
                        "src": "140207:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4405,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "140207:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "140171:63:0"
                  },
                  "returnParameters": {
                    "id": 4410,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4409,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4419,
                        "src": "140253:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4408,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "140253:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "140252:14:0"
                  },
                  "scope": 4572,
                  "src": "140150:193:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4438,
                    "nodeType": "Block",
                    "src": "140818:111:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4432,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4422,
                              "src": "140857:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4433,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4424,
                              "src": "140865:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4434,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4426,
                              "src": "140871:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
                              "id": 4435,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "140878:43:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              },
                              "value": "Address: low-level call with value failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              }
                            ],
                            "id": 4431,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4439,
                              4489
                            ],
                            "referencedDeclaration": 4489,
                            "src": "140835:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 4436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "140835:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4430,
                        "id": 4437,
                        "nodeType": "Return",
                        "src": "140828:94:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4420,
                    "nodeType": "StructuredDocumentation",
                    "src": "140349:351:0",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
                  },
                  "id": 4439,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4427,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4422,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4439,
                        "src": "140736:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4421,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "140736:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4424,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4439,
                        "src": "140752:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4423,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "140752:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4426,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4439,
                        "src": "140771:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4425,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "140771:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "140735:50:0"
                  },
                  "returnParameters": {
                    "id": 4430,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4429,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4439,
                        "src": "140804:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4428,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "140804:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "140803:14:0"
                  },
                  "scope": 4572,
                  "src": "140705:224:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4488,
                    "nodeType": "Block",
                    "src": "141318:382:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4460,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4456,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "141344:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$4572",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$4572",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 4455,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "141336:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4454,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "141336:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4457,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "141336:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 4458,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "141336:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4459,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4446,
                                "src": "141361:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "141336:30:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
                              "id": 4461,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "141368:40:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              },
                              "value": "Address: insufficient balance for call"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              }
                            ],
                            "id": 4453,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "141328:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4462,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "141328:81:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4463,
                        "nodeType": "ExpressionStatement",
                        "src": "141328:81:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4466,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4442,
                                  "src": "141438:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4465,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4348,
                                "src": "141427:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 4467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "141427:18:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 4468,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "141447:31:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                "typeString": "literal_string \"Address: call to non-contract\""
                              },
                              "value": "Address: call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                "typeString": "literal_string \"Address: call to non-contract\""
                              }
                            ],
                            "id": 4464,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "141419:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "141419:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4470,
                        "nodeType": "ExpressionStatement",
                        "src": "141419:60:0"
                      },
                      {
                        "assignments": [
                          4472,
                          4474
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4472,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4488,
                            "src": "141550:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4471,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "141550:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 4474,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4488,
                            "src": "141564:23:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4473,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "141564:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4481,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4479,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4444,
                              "src": "141619:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4475,
                                "name": "target",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4442,
                                "src": "141591:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 4476,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "141591:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 4478,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "argumentTypes": null,
                                "id": 4477,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4446,
                                "src": "141611:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "141591:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "141591:33:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "141549:75:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4483,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4472,
                              "src": "141659:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4484,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4474,
                              "src": "141668:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4485,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4448,
                              "src": "141680:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4482,
                            "name": "_verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4571,
                            "src": "141641:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 4486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "141641:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4452,
                        "id": 4487,
                        "nodeType": "Return",
                        "src": "141634:59:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4440,
                    "nodeType": "StructuredDocumentation",
                    "src": "140935:237:0",
                    "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 4489,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4449,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4442,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4489,
                        "src": "141208:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4441,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "141208:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4444,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4489,
                        "src": "141224:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4443,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "141224:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4446,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4489,
                        "src": "141243:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4445,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "141243:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4448,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4489,
                        "src": "141258:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4447,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "141258:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "141207:78:0"
                  },
                  "returnParameters": {
                    "id": 4452,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4451,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4489,
                        "src": "141304:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4450,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "141304:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "141303:14:0"
                  },
                  "scope": 4572,
                  "src": "141177:523:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4505,
                    "nodeType": "Block",
                    "src": "141977:97:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4500,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4492,
                              "src": "142013:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4501,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4494,
                              "src": "142021:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
                              "id": 4502,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "142027:39:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                "typeString": "literal_string \"Address: low-level static call failed\""
                              },
                              "value": "Address: low-level static call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                "typeString": "literal_string \"Address: low-level static call failed\""
                              }
                            ],
                            "id": 4499,
                            "name": "functionStaticCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4506,
                              4541
                            ],
                            "referencedDeclaration": 4541,
                            "src": "141994:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
                            }
                          },
                          "id": 4503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "141994:73:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4498,
                        "id": 4504,
                        "nodeType": "Return",
                        "src": "141987:80:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4490,
                    "nodeType": "StructuredDocumentation",
                    "src": "141706:166:0",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 4506,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4495,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4492,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4506,
                        "src": "141905:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4491,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "141905:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4494,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4506,
                        "src": "141921:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4493,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "141921:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "141904:35:0"
                  },
                  "returnParameters": {
                    "id": 4498,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4497,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4506,
                        "src": "141963:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4496,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "141963:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "141962:14:0"
                  },
                  "scope": 4572,
                  "src": "141877:197:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4540,
                    "nodeType": "Block",
                    "src": "142386:288:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4520,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4509,
                                  "src": "142415:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4519,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4348,
                                "src": "142404:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 4521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "142404:18:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 4522,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "142424:38:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                "typeString": "literal_string \"Address: static call to non-contract\""
                              },
                              "value": "Address: static call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                "typeString": "literal_string \"Address: static call to non-contract\""
                              }
                            ],
                            "id": 4518,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "142396:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4523,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "142396:67:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4524,
                        "nodeType": "ExpressionStatement",
                        "src": "142396:67:0"
                      },
                      {
                        "assignments": [
                          4526,
                          4528
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4526,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4540,
                            "src": "142534:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4525,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "142534:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 4528,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4540,
                            "src": "142548:23:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4527,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "142548:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4533,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4531,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4511,
                              "src": "142593:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4529,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4509,
                              "src": "142575:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4530,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "staticcall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "142575:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                            }
                          },
                          "id": 4532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "142575:23:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "142533:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4535,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4526,
                              "src": "142633:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4536,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4528,
                              "src": "142642:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4537,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4513,
                              "src": "142654:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4534,
                            "name": "_verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4571,
                            "src": "142615:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 4538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "142615:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4517,
                        "id": 4539,
                        "nodeType": "Return",
                        "src": "142608:59:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4507,
                    "nodeType": "StructuredDocumentation",
                    "src": "142080:173:0",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 4541,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4509,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4541,
                        "src": "142286:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4508,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "142286:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4511,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4541,
                        "src": "142302:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4510,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "142302:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4513,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4541,
                        "src": "142321:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4512,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "142321:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "142285:63:0"
                  },
                  "returnParameters": {
                    "id": 4517,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4516,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4541,
                        "src": "142372:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4515,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "142372:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "142371:14:0"
                  },
                  "scope": 4572,
                  "src": "142258:416:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4570,
                    "nodeType": "Block",
                    "src": "142809:596:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 4552,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4543,
                          "src": "142823:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 4568,
                          "nodeType": "Block",
                          "src": "142880:519:0",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4559,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4556,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4545,
                                    "src": "142964:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 4557,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "142964:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 4558,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "142984:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "142964:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 4566,
                                "nodeType": "Block",
                                "src": "143336:53:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 4563,
                                          "name": "errorMessage",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4547,
                                          "src": "143361:12:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 4562,
                                        "name": "revert",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          -19,
                                          -19
                                        ],
                                        "referencedDeclaration": -19,
                                        "src": "143354:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                          "typeString": "function (string memory) pure"
                                        }
                                      },
                                      "id": 4564,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "143354:20:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 4565,
                                    "nodeType": "ExpressionStatement",
                                    "src": "143354:20:0"
                                  }
                                ]
                              },
                              "id": 4567,
                              "nodeType": "IfStatement",
                              "src": "142960:429:0",
                              "trueBody": {
                                "id": 4561,
                                "nodeType": "Block",
                                "src": "142987:343:0",
                                "statements": [
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "143171:145:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "143193:40:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "returndata",
                                                "nodeType": "YulIdentifier",
                                                "src": "143222:10:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "143216:5:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "143216:17:0"
                                          },
                                          "variables": [
                                            {
                                              "name": "returndata_size",
                                              "nodeType": "YulTypedName",
                                              "src": "143197:15:0",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "143265:2:0",
                                                    "type": "",
                                                    "value": "32"
                                                  },
                                                  {
                                                    "name": "returndata",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "143269:10:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "143261:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "143261:19:0"
                                              },
                                              {
                                                "name": "returndata_size",
                                                "nodeType": "YulIdentifier",
                                                "src": "143282:15:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "143254:6:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "143254:44:0"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "143254:44:0"
                                        }
                                      ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                      {
                                        "declaration": 4545,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "143222:10:0",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 4545,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "143269:10:0",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 4560,
                                    "nodeType": "InlineAssembly",
                                    "src": "143162:154:0"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "id": 4569,
                        "nodeType": "IfStatement",
                        "src": "142819:580:0",
                        "trueBody": {
                          "id": 4555,
                          "nodeType": "Block",
                          "src": "142832:42:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4553,
                                "name": "returndata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4545,
                                "src": "142853:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 4551,
                              "id": 4554,
                              "nodeType": "Return",
                              "src": "142846:17:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4571,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_verifyCallResult",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4548,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4543,
                        "mutability": "mutable",
                        "name": "success",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4571,
                        "src": "142707:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4542,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "142707:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4545,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4571,
                        "src": "142721:23:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4544,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "142721:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4547,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4571,
                        "src": "142746:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4546,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "142746:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "142706:67:0"
                  },
                  "returnParameters": {
                    "id": 4551,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4550,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4571,
                        "src": "142795:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4549,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "142795:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "142794:14:0"
                  },
                  "scope": 4572,
                  "src": "142680:725:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 7393,
              "src": "136703:6704:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4573,
                "nodeType": "StructuredDocumentation",
                "src": "143628:457:0",
                "text": " @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."
              },
              "fullyImplemented": true,
              "id": 4780,
              "linearizedBaseContracts": [
                4780
              ],
              "name": "SafeERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 4576,
                  "libraryName": {
                    "contractScope": null,
                    "id": 4574,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "144116:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "144110:27:0",
                  "typeName": {
                    "id": 4575,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "144129:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 4579,
                  "libraryName": {
                    "contractScope": null,
                    "id": 4577,
                    "name": "Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4572,
                    "src": "144148:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Address_$4572",
                      "typeString": "library Address"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "144142:26:0",
                  "typeName": {
                    "id": 4578,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "144160:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                },
                {
                  "body": {
                    "id": 4600,
                    "nodeType": "Block",
                    "src": "144246:103:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4589,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4581,
                              "src": "144276:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4592,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4581,
                                      "src": "144306:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 4593,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "transfer",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 26,
                                    "src": "144306:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 4594,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "144306:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4595,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4583,
                                  "src": "144331:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4596,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4585,
                                  "src": "144335:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4590,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "144283:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4591,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "144283:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4597,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "144283:58:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4588,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "144256:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 4598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "144256:86:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4599,
                        "nodeType": "ExpressionStatement",
                        "src": "144256:86:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4601,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4586,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4581,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4601,
                        "src": "144196:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4580,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "144196:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4583,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4601,
                        "src": "144210:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4582,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "144210:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4585,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4601,
                        "src": "144222:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4584,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "144222:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "144195:41:0"
                  },
                  "returnParameters": {
                    "id": 4587,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "144246:0:0"
                  },
                  "scope": 4780,
                  "src": "144174:175:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4625,
                    "nodeType": "Block",
                    "src": "144445:113:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4613,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4603,
                              "src": "144475:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4616,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4603,
                                      "src": "144505:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 4617,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "transferFrom",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 58,
                                    "src": "144505:18:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 4618,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "144505:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4619,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4605,
                                  "src": "144534:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4620,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4607,
                                  "src": "144540:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4621,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4609,
                                  "src": "144544:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4614,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "144482:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4615,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "144482:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "144482:68:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4612,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "144455:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 4623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "144455:96:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4624,
                        "nodeType": "ExpressionStatement",
                        "src": "144455:96:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4626,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4610,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4603,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4626,
                        "src": "144381:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4602,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "144381:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4605,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4626,
                        "src": "144395:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4604,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "144395:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4607,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4626,
                        "src": "144409:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4606,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "144409:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4609,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4626,
                        "src": "144421:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4608,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "144421:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "144380:55:0"
                  },
                  "returnParameters": {
                    "id": 4611,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "144445:0:0"
                  },
                  "scope": 4780,
                  "src": "144355:203:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4668,
                    "nodeType": "Block",
                    "src": "144894:537:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4652,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4639,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 4637,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4633,
                                      "src": "145183:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 4638,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "145192:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "145183:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 4640,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "145182:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4650,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "id": 4645,
                                              "name": "this",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -28,
                                              "src": "145223:4:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                                "typeString": "library SafeERC20"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                                "typeString": "library SafeERC20"
                                              }
                                            ],
                                            "id": 4644,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "145215:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_address_$",
                                              "typeString": "type(address)"
                                            },
                                            "typeName": {
                                              "id": 4643,
                                              "name": "address",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "145215:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": null,
                                                "typeString": null
                                              }
                                            }
                                          },
                                          "id": 4646,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "145215:13:0",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 4647,
                                          "name": "spender",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4631,
                                          "src": "145230:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 4641,
                                          "name": "token",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4629,
                                          "src": "145199:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$77",
                                            "typeString": "contract IERC20"
                                          }
                                        },
                                        "id": 4642,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "allowance",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 36,
                                        "src": "145199:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                          "typeString": "function (address,address) view external returns (uint256)"
                                        }
                                      },
                                      "id": 4648,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "145199:39:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 4649,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "145242:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "145199:44:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 4651,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "145198:46:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "145182:62:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365",
                              "id": 4653,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "145258:56:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
                                "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
                              },
                              "value": "SafeERC20: approve from non-zero to non-zero allowance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
                                "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
                              }
                            ],
                            "id": 4636,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "145174:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145174:150:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4655,
                        "nodeType": "ExpressionStatement",
                        "src": "145174:150:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4657,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4629,
                              "src": "145354:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4660,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4629,
                                      "src": "145384:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 4661,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46,
                                    "src": "145384:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 4662,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "145384:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4663,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4631,
                                  "src": "145408:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4664,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4633,
                                  "src": "145417:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4658,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "145361:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4659,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "145361:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4665,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "145361:62:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4656,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "145334:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 4666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145334:90:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4667,
                        "nodeType": "ExpressionStatement",
                        "src": "145334:90:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4627,
                    "nodeType": "StructuredDocumentation",
                    "src": "144564:249:0",
                    "text": " @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."
                  },
                  "id": 4669,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeApprove",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4634,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4629,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4669,
                        "src": "144839:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4628,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "144839:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4631,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4669,
                        "src": "144853:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4630,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "144853:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4633,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4669,
                        "src": "144870:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4632,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "144870:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "144838:46:0"
                  },
                  "returnParameters": {
                    "id": 4635,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "144894:0:0"
                  },
                  "scope": 4780,
                  "src": "144818:613:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4704,
                    "nodeType": "Block",
                    "src": "145523:197:0",
                    "statements": [
                      {
                        "assignments": [
                          4679
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4679,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4704,
                            "src": "145533:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4678,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "145533:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4691,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4689,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4675,
                              "src": "145600:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4684,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "145580:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                        "typeString": "library SafeERC20"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                        "typeString": "library SafeERC20"
                                      }
                                    ],
                                    "id": 4683,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "145572:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4682,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "145572:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4685,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "145572:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4686,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4673,
                                  "src": "145587:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4680,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4671,
                                  "src": "145556:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 4681,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "allowance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36,
                                "src": "145556:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address,address) view external returns (uint256)"
                                }
                              },
                              "id": 4687,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "145556:39:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4688,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "145556:43:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145556:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "145533:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4693,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4671,
                              "src": "145636:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4696,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4671,
                                      "src": "145666:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 4697,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46,
                                    "src": "145666:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 4698,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "145666:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4699,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4673,
                                  "src": "145690:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4700,
                                  "name": "newAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4679,
                                  "src": "145699:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4694,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "145643:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4695,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "145643:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4701,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "145643:69:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4692,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "145616:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 4702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145616:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4703,
                        "nodeType": "ExpressionStatement",
                        "src": "145616:97:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4705,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeIncreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4676,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4671,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4705,
                        "src": "145468:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4670,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "145468:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4673,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4705,
                        "src": "145482:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4672,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "145482:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4675,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4705,
                        "src": "145499:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4674,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "145499:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "145467:46:0"
                  },
                  "returnParameters": {
                    "id": 4677,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "145523:0:0"
                  },
                  "scope": 4780,
                  "src": "145437:283:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4741,
                    "nodeType": "Block",
                    "src": "145812:242:0",
                    "statements": [
                      {
                        "assignments": [
                          4715
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4715,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4741,
                            "src": "145822:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4714,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "145822:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4728,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4725,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4711,
                              "src": "145889:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                              "id": 4726,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "145896:43:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
                                "typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
                              },
                              "value": "SafeERC20: decreased allowance below zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
                                "typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4720,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "145869:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                        "typeString": "library SafeERC20"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                        "typeString": "library SafeERC20"
                                      }
                                    ],
                                    "id": 4719,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "145861:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4718,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "145861:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4721,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "145861:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4722,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4709,
                                  "src": "145876:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4716,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4707,
                                  "src": "145845:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 4717,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "allowance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36,
                                "src": "145845:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address,address) view external returns (uint256)"
                                }
                              },
                              "id": 4723,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "145845:39:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4724,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 756,
                            "src": "145845:43:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 4727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145845:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "145822:118:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4730,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4707,
                              "src": "145970:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4733,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4707,
                                      "src": "146000:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 4734,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46,
                                    "src": "146000:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 4735,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "146000:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4736,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4709,
                                  "src": "146024:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4737,
                                  "name": "newAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4715,
                                  "src": "146033:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4731,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "145977:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "145977:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "145977:69:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4729,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "145950:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 4739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145950:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4740,
                        "nodeType": "ExpressionStatement",
                        "src": "145950:97:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4742,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeDecreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4712,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4707,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4742,
                        "src": "145757:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4706,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "145757:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4709,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4742,
                        "src": "145771:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4708,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "145771:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4711,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4742,
                        "src": "145788:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4710,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "145788:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "145756:46:0"
                  },
                  "returnParameters": {
                    "id": 4713,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "145812:0:0"
                  },
                  "scope": 4780,
                  "src": "145726:328:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4778,
                    "nodeType": "Block",
                    "src": "146507:681:0",
                    "statements": [
                      {
                        "assignments": [
                          4751
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4751,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4778,
                            "src": "146856:23:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4750,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "146856:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4760,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4757,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4747,
                              "src": "146910:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 4758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "146916:34:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
                                "typeString": "literal_string \"SafeERC20: low-level call failed\""
                              },
                              "value": "SafeERC20: low-level call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
                                "typeString": "literal_string \"SafeERC20: low-level call failed\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4754,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4745,
                                  "src": "146890:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 4753,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "146882:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4752,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "146882:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4755,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "146882:14:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4756,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "functionCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4419,
                            "src": "146882:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 4759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "146882:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "146856:95:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4761,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4751,
                              "src": "146965:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 4762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "146965:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "146985:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "146965:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4777,
                        "nodeType": "IfStatement",
                        "src": "146961:221:0",
                        "trueBody": {
                          "id": 4776,
                          "nodeType": "Block",
                          "src": "146988:194:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4768,
                                        "name": "returndata",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4751,
                                        "src": "147105:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "id": 4770,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "147118:4:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_bool_$",
                                              "typeString": "type(bool)"
                                            },
                                            "typeName": {
                                              "id": 4769,
                                              "name": "bool",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "147118:4:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": null,
                                                "typeString": null
                                              }
                                            }
                                          }
                                        ],
                                        "id": 4771,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "147117:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4766,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "147094:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 4767,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "147094:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 4772,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "147094:30:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564",
                                    "id": 4773,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "147126:44:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
                                      "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
                                    },
                                    "value": "SafeERC20: ERC20 operation did not succeed"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
                                      "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
                                    }
                                  ],
                                  "id": 4765,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "147086:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 4774,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "147086:85:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4775,
                              "nodeType": "ExpressionStatement",
                              "src": "147086:85:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4743,
                    "nodeType": "StructuredDocumentation",
                    "src": "146060:372:0",
                    "text": " @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."
                  },
                  "id": 4779,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_callOptionalReturn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4748,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4745,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4779,
                        "src": "146466:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4744,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "146466:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4747,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4779,
                        "src": "146480:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4746,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "146480:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "146465:33:0"
                  },
                  "returnParameters": {
                    "id": 4749,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "146507:0:0"
                  },
                  "scope": 4780,
                  "src": "146437:751:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 7393,
              "src": "144086:3104:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4781,
                "nodeType": "StructuredDocumentation",
                "src": "148264:67:0",
                "text": "@title PoolLib is a library of utility functions used by Pool."
              },
              "fullyImplemented": true,
              "id": 5865,
              "linearizedBaseContracts": [
                5865
              ],
              "name": "PoolLib",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 4784,
                  "libraryName": {
                    "contractScope": null,
                    "id": 4782,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "148360:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "148354:27:0",
                  "typeName": {
                    "id": 4783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "148373:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 4787,
                  "libraryName": {
                    "contractScope": null,
                    "id": 4785,
                    "name": "SafeERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4780,
                    "src": "148392:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeERC20_$4780",
                      "typeString": "library SafeERC20"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "148386:27:0",
                  "typeName": {
                    "contractScope": null,
                    "id": 4786,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "148406:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "constant": true,
                  "functionSelector": "33a581d2",
                  "id": 4794,
                  "mutability": "constant",
                  "name": "MAX_UINT256",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5865,
                  "src": "148419:49:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4788,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "148419:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "-",
                        "prefix": true,
                        "src": "148465:2:0",
                        "subExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 4791,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "148466:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_minus_1_by_1",
                          "typeString": "int_const -1"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_minus_1_by_1",
                          "typeString": "int_const -1"
                        }
                      ],
                      "id": 4790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "148457:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 4789,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "148457:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 4793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "148457:11:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "6a146024",
                  "id": 4799,
                  "mutability": "constant",
                  "name": "WAD",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5865,
                  "src": "148474:46:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4795,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "148474:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000"
                    },
                    "id": 4798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "3130",
                      "id": 4796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "148512:2:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3138",
                      "id": 4797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "148518:2:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_18_by_1",
                        "typeString": "int_const 18"
                      },
                      "value": "18"
                    },
                    "src": "148512:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "174a5be4",
                  "id": 4802,
                  "mutability": "constant",
                  "name": "DL_FACTORY",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5865,
                  "src": "148526:39:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4800,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "148526:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 4801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "148564:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "visibility": "public"
                },
                {
                  "anonymous": false,
                  "documentation": null,
                  "id": 4810,
                  "name": "LoanFunded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4809,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4804,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4810,
                        "src": "148642:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4803,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "148642:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4806,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4810,
                        "src": "148664:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4805,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "148664:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4808,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amountFunded",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4810,
                        "src": "148684:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4807,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "148684:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "148641:64:0"
                  },
                  "src": "148617:89:0"
                },
                {
                  "anonymous": false,
                  "documentation": null,
                  "id": 4816,
                  "name": "DepositDateUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4815,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4812,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4816,
                        "src": "148736:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4811,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "148736:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4814,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "depositDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4816,
                        "src": "148771:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4813,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "148771:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "148735:56:0"
                  },
                  "src": "148711:81:0"
                },
                {
                  "body": {
                    "id": 4881,
                    "nodeType": "Block",
                    "src": "149611:511:0",
                    "statements": [
                      {
                        "assignments": [
                          4831
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4831,
                            "mutability": "mutable",
                            "name": "bPool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4881,
                            "src": "149621:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBPool_$4312",
                              "typeString": "contract IBPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4830,
                              "name": "IBPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4312,
                              "src": "149621:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4835,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4833,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4823,
                              "src": "149643:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4832,
                            "name": "IBPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "149636:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                              "typeString": "type(contract IBPool)"
                            }
                          },
                          "id": 4834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "149636:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBPool_$4312",
                            "typeString": "contract IBPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "149621:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4839,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4821,
                                  "src": "149703:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4837,
                                  "name": "globals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4819,
                                  "src": "149673:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                    "typeString": "contract IMapleGlobals"
                                  }
                                },
                                "id": 4838,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isValidLiquidityAsset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2577,
                                "src": "149673:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view external returns (bool)"
                                }
                              },
                              "id": 4840,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "149673:45:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f4c49515f4153534554",
                              "id": 4841,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "149720:21:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9b8b63b5878fdb07e6ad33728b6c71ada5bbdd2a67c51849ce807aff8f8ea75c",
                                "typeString": "literal_string \"P:INVALID_LIQ_ASSET\""
                              },
                              "value": "P:INVALID_LIQ_ASSET"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9b8b63b5878fdb07e6ad33728b6c71ada5bbdd2a67c51849ce807aff8f8ea75c",
                                "typeString": "literal_string \"P:INVALID_LIQ_ASSET\""
                              }
                            ],
                            "id": 4836,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "149665:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "149665:77:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4843,
                        "nodeType": "ExpressionStatement",
                        "src": "149665:77:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4850,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4847,
                                    "name": "delegateFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4827,
                                    "src": "149775:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4845,
                                    "name": "stakingFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4825,
                                    "src": "149760:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4846,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 711,
                                  "src": "149760:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4848,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "149760:27:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31305f303030",
                                "id": 4849,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "149791:6:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                "value": "10_000"
                              },
                              "src": "149760:37:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f46454553",
                              "id": 4851,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "149807:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_88eb5ba75690dea84c695e943758998aee28affff15ee3741c64f20673db6e2a",
                                "typeString": "literal_string \"P:INVALID_FEES\""
                              },
                              "value": "P:INVALID_FEES"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_88eb5ba75690dea84c695e943758998aee28affff15ee3741c64f20673db6e2a",
                                "typeString": "literal_string \"P:INVALID_FEES\""
                              }
                            ],
                            "id": 4844,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "149752:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4852,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "149752:72:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4853,
                        "nodeType": "ExpressionStatement",
                        "src": "149752:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4877,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 4873,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 4868,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 4859,
                                            "name": "stakeAsset",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4823,
                                            "src": "149891:10:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 4858,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "149883:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 4857,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "149883:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": null,
                                              "typeString": null
                                            }
                                          }
                                        },
                                        "id": 4860,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "149883:19:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4855,
                                        "name": "globals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4819,
                                        "src": "149855:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                          "typeString": "contract IMapleGlobals"
                                        }
                                      },
                                      "id": 4856,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "isValidBalancerPool",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2609,
                                      "src": "149855:27:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                        "typeString": "function (address) view external returns (bool)"
                                      }
                                    },
                                    "id": 4861,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "149855:48:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 4864,
                                            "name": "globals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4819,
                                            "src": "149933:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                              "typeString": "contract IMapleGlobals"
                                            }
                                          },
                                          "id": 4865,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mpl",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 2473,
                                          "src": "149933:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                            "typeString": "function () pure external returns (address)"
                                          }
                                        },
                                        "id": 4866,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "149933:13:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4862,
                                        "name": "bPool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4831,
                                        "src": "149919:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IBPool_$4312",
                                          "typeString": "contract IBPool"
                                        }
                                      },
                                      "id": 4863,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "isBound",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4211,
                                      "src": "149919:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                        "typeString": "function (address) view external returns (bool)"
                                      }
                                    },
                                    "id": 4867,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "149919:28:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "149855:92:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4871,
                                      "name": "liquidityAsset",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4821,
                                      "src": "149997:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4869,
                                      "name": "bPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4831,
                                      "src": "149983:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IBPool_$4312",
                                        "typeString": "contract IBPool"
                                      }
                                    },
                                    "id": 4870,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "isBound",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4211,
                                    "src": "149983:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                      "typeString": "function (address) view external returns (bool)"
                                    }
                                  },
                                  "id": 4872,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "149983:29:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "149855:157:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4874,
                                    "name": "bPool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4831,
                                    "src": "150047:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IBPool_$4312",
                                      "typeString": "contract IBPool"
                                    }
                                  },
                                  "id": 4875,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "isFinalized",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4204,
                                  "src": "150047:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                                    "typeString": "function () view external returns (bool)"
                                  }
                                },
                                "id": 4876,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "150047:19:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "149855:211:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f42414c414e4345525f504f4f4c",
                              "id": 4878,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "150080:25:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_d1dd8f0bd83aad99d140eea19042a10daddebb94430f6d5c593114c14a9ccfcb",
                                "typeString": "literal_string \"P:INVALID_BALANCER_POOL\""
                              },
                              "value": "P:INVALID_BALANCER_POOL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_d1dd8f0bd83aad99d140eea19042a10daddebb94430f6d5c593114c14a9ccfcb",
                                "typeString": "literal_string \"P:INVALID_BALANCER_POOL\""
                              }
                            ],
                            "id": 4854,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "149834:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4879,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "149834:281:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4880,
                        "nodeType": "ExpressionStatement",
                        "src": "149834:281:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4817,
                    "nodeType": "StructuredDocumentation",
                    "src": "148937:475:0",
                    "text": "@dev   Conducts sanity checks for Pools in the constructor.\n@param globals        The instance of a MapleGlobals.\n@param liquidityAsset The asset used by Pool for liquidity to fund loans.\n@param stakeAsset     The asset escrowed in StakeLocker.\n@param stakingFee     The fee that the Stakers earn on interest, in basis points.\n@param delegateFee    The fee that the Pool Delegate earns on interest, in basis points."
                  },
                  "functionSelector": "14985168",
                  "id": 4882,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolSanityChecks",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4828,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4819,
                        "mutability": "mutable",
                        "name": "globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4882,
                        "src": "149452:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4818,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "149452:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4821,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4882,
                        "src": "149483:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4820,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "149483:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4823,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4882,
                        "src": "149515:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4822,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "149515:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4825,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4882,
                        "src": "149543:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4824,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "149543:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4827,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4882,
                        "src": "149571:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4826,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "149571:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "149442:154:0"
                  },
                  "returnParameters": {
                    "id": 4829,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "149611:0:0"
                  },
                  "scope": 5865,
                  "src": "149417:705:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 4996,
                    "nodeType": "Block",
                    "src": "151036:932:0",
                    "statements": [
                      {
                        "assignments": [
                          4903
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4903,
                            "mutability": "mutable",
                            "name": "globals",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4996,
                            "src": "151046:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                              "typeString": "contract IMapleGlobals"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4902,
                              "name": "IMapleGlobals",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 2870,
                              "src": "151046:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4911,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4906,
                                      "name": "superFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4891,
                                      "src": "151097:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 4905,
                                    "name": "ILoanFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3092,
                                    "src": "151084:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ILoanFactory_$3092_$",
                                      "typeString": "type(contract ILoanFactory)"
                                    }
                                  },
                                  "id": 4907,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "151084:26:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ILoanFactory_$3092",
                                    "typeString": "contract ILoanFactory"
                                  }
                                },
                                "id": 4908,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "globals",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3017,
                                "src": "151084:34:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function () view external returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 4909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151084:36:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            ],
                            "id": 4904,
                            "name": "IMapleGlobals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2870,
                            "src": "151070:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IMapleGlobals_$2870_$",
                              "typeString": "type(contract IMapleGlobals)"
                            }
                          },
                          "id": 4910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151070:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "151046:75:0"
                      },
                      {
                        "assignments": [
                          4913
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4913,
                            "mutability": "mutable",
                            "name": "loanFactory",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4996,
                            "src": "151131:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 4912,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "151131:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4919,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4915,
                                  "name": "loan",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4895,
                                  "src": "151161:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4914,
                                "name": "ILoan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 520,
                                "src": "151155:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ILoan_$520_$",
                                  "typeString": "type(contract ILoan)"
                                }
                              },
                              "id": 4916,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151155:11:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILoan_$520",
                                "typeString": "contract ILoan"
                              }
                            },
                            "id": 4917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "superFactory",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 302,
                            "src": "151155:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 4918,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151155:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "151131:50:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4923,
                                  "name": "loanFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4913,
                                  "src": "151251:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4921,
                                  "name": "globals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4903,
                                  "src": "151224:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                    "typeString": "contract IMapleGlobals"
                                  }
                                },
                                "id": 4922,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isValidLoanFactory",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2643,
                                "src": "151224:26:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view external returns (bool)"
                                }
                              },
                              "id": 4924,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151224:39:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f4c46",
                              "id": 4925,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "151288:14:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_620d1b1dfa2ab14843bf9e96ecfd606cb302db28ca9b5542dcda3b428bf8886e",
                                "typeString": "literal_string \"P:INVALID_LF\""
                              },
                              "value": "P:INVALID_LF"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_620d1b1dfa2ab14843bf9e96ecfd606cb302db28ca9b5542dcda3b428bf8886e",
                                "typeString": "literal_string \"P:INVALID_LF\""
                              }
                            ],
                            "id": 4920,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "151216:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4926,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151216:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4927,
                        "nodeType": "ExpressionStatement",
                        "src": "151216:87:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4933,
                                  "name": "loan",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4895,
                                  "src": "151354:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4930,
                                      "name": "loanFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4913,
                                      "src": "151334:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 4929,
                                    "name": "ILoanFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3092,
                                    "src": "151321:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ILoanFactory_$3092_$",
                                      "typeString": "type(contract ILoanFactory)"
                                    }
                                  },
                                  "id": 4931,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "151321:25:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ILoanFactory_$3092",
                                    "typeString": "contract ILoanFactory"
                                  }
                                },
                                "id": 4932,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isLoan",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3039,
                                "src": "151321:32:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view external returns (bool)"
                                }
                              },
                              "id": 4934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151321:38:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f4c",
                              "id": 4935,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "151385:13:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8ab01fbae58364997fb6e48abf7748e5280e995b4bcd2b59610168c694f73cb7",
                                "typeString": "literal_string \"P:INVALID_L\""
                              },
                              "value": "P:INVALID_L"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8ab01fbae58364997fb6e48abf7748e5280e995b4bcd2b59610168c694f73cb7",
                                "typeString": "literal_string \"P:INVALID_L\""
                              }
                            ],
                            "id": 4928,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "151313:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151313:86:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4937,
                        "nodeType": "ExpressionStatement",
                        "src": "151313:86:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4941,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4891,
                                  "src": "151443:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4942,
                                  "name": "dlFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4897,
                                  "src": "151457:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4943,
                                  "name": "DL_FACTORY",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4802,
                                  "src": "151468:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4939,
                                  "name": "globals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4903,
                                  "src": "151417:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                    "typeString": "contract IMapleGlobals"
                                  }
                                },
                                "id": 4940,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isValidSubFactory",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2851,
                                "src": "151417:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint8_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint8) view external returns (bool)"
                                }
                              },
                              "id": 4944,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151417:62:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f444c46",
                              "id": 4945,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "151481:15:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_61be5fb441c61e33fd0f254579efe1503cb9e300437aacf115dff03bed1fc86f",
                                "typeString": "literal_string \"P:INVALID_DLF\""
                              },
                              "value": "P:INVALID_DLF"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_61be5fb441c61e33fd0f254579efe1503cb9e300437aacf115dff03bed1fc86f",
                                "typeString": "literal_string \"P:INVALID_DLF\""
                              }
                            ],
                            "id": 4938,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "151409:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4946,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151409:88:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4947,
                        "nodeType": "ExpressionStatement",
                        "src": "151409:88:0"
                      },
                      {
                        "assignments": [
                          4949
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4949,
                            "mutability": "mutable",
                            "name": "debtLocker",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4996,
                            "src": "151508:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 4948,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "151508:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4955,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4950,
                              "name": "debtLockers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4889,
                              "src": "151529:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                "typeString": "mapping(address => mapping(address => address))"
                              }
                            },
                            "id": 4952,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4951,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4895,
                              "src": "151541:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "151529:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 4954,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4953,
                            "name": "dlFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4897,
                            "src": "151547:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "151529:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "151508:49:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4961,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4956,
                            "name": "debtLocker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4949,
                            "src": "151647:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 4959,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "151669:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 4958,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "151661:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4957,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "151661:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 4960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "151661:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "151647:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4980,
                        "nodeType": "IfStatement",
                        "src": "151643:168:0",
                        "trueBody": {
                          "id": 4979,
                          "nodeType": "Block",
                          "src": "151673:138:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4969,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4962,
                                  "name": "debtLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4949,
                                  "src": "151687:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4967,
                                      "name": "loan",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4895,
                                      "src": "151740:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 4964,
                                          "name": "dlFactory",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4897,
                                          "src": "151719:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 4963,
                                        "name": "IDebtLockerFactory",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 640,
                                        "src": "151700:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IDebtLockerFactory_$640_$",
                                          "typeString": "type(contract IDebtLockerFactory)"
                                        }
                                      },
                                      "id": 4965,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "151700:29:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IDebtLockerFactory_$640",
                                        "typeString": "contract IDebtLockerFactory"
                                      }
                                    },
                                    "id": 4966,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "newLocker",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 639,
                                    "src": "151700:39:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_address_$",
                                      "typeString": "function (address) external returns (address)"
                                    }
                                  },
                                  "id": 4968,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "151700:45:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "151687:58:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 4970,
                              "nodeType": "ExpressionStatement",
                              "src": "151687:58:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4977,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 4971,
                                      "name": "debtLockers",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4889,
                                      "src": "151759:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                        "typeString": "mapping(address => mapping(address => address))"
                                      }
                                    },
                                    "id": 4974,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 4972,
                                      "name": "loan",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4895,
                                      "src": "151771:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "151759:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                      "typeString": "mapping(address => address)"
                                    }
                                  },
                                  "id": 4975,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 4973,
                                    "name": "dlFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4897,
                                    "src": "151777:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "151759:28:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 4976,
                                  "name": "debtLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4949,
                                  "src": "151790:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "151759:41:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 4978,
                              "nodeType": "ExpressionStatement",
                              "src": "151759:41:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4985,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4895,
                              "src": "151890:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4986,
                              "name": "debtLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4949,
                              "src": "151896:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4987,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4899,
                              "src": "151908:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4982,
                                  "name": "liquidityLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4893,
                                  "src": "151864:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4981,
                                "name": "ILiquidityLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2902,
                                "src": "151847:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ILiquidityLocker_$2902_$",
                                  "typeString": "type(contract ILiquidityLocker)"
                                }
                              },
                              "id": 4983,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151847:33:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILiquidityLocker_$2902",
                                "typeString": "contract ILiquidityLocker"
                              }
                            },
                            "id": 4984,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fundLoan",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2901,
                            "src": "151847:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256) external"
                            }
                          },
                          "id": 4988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151847:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4989,
                        "nodeType": "ExpressionStatement",
                        "src": "151847:65:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4991,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4895,
                              "src": "151939:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4992,
                              "name": "debtLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4949,
                              "src": "151945:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4993,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4899,
                              "src": "151957:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4990,
                            "name": "LoanFunded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4810,
                            "src": "151928:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 4994,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151928:33:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4995,
                        "nodeType": "EmitStatement",
                        "src": "151923:38:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4883,
                    "nodeType": "StructuredDocumentation",
                    "src": "150128:660:0",
                    "text": "@dev   Funds a Loan for an amount, utilizing the supplied DebtLockerFactory for DebtLockers. \n@dev   It emits a `LoanFunded` event. \n@param debtLockers     The mapping reference that contains the DebtLocker contract address corresponding to the DebtLockerFactory and Loan.\n@param superFactory    The address of the PoolFactory.\n@param liquidityLocker The address of the LiquidityLocker contract attached with this Pool.\n@param loan            The address of the Loan to fund.\n@param dlFactory       The DebtLockerFactory to utilize.\n@param amt             The amount to fund the Loan."
                  },
                  "functionSelector": "fbecb171",
                  "id": 4997,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4900,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4889,
                        "mutability": "mutable",
                        "name": "debtLockers",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "150820:67:0",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                          "typeString": "mapping(address => mapping(address => address))"
                        },
                        "typeName": {
                          "id": 4888,
                          "keyType": {
                            "id": 4884,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "150828:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Mapping",
                          "src": "150820:47:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                            "typeString": "mapping(address => mapping(address => address))"
                          },
                          "valueType": {
                            "id": 4887,
                            "keyType": {
                              "id": 4885,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "150847:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "Mapping",
                            "src": "150839:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            },
                            "valueType": {
                              "id": 4886,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "150858:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4891,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "150897:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4890,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "150897:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4893,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "150927:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4892,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "150927:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4895,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "150960:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4894,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "150960:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4897,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "150982:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4896,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "150982:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4899,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "151009:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4898,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "151009:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "150810:216:0"
                  },
                  "returnParameters": {
                    "id": 4901,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "151036:0:0"
                  },
                  "scope": 5865,
                  "src": "150793:1175:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5126,
                    "nodeType": "Block",
                    "src": "153038:1404:0",
                    "statements": [
                      {
                        "assignments": [
                          5016
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5016,
                            "mutability": "mutable",
                            "name": "bPool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5126,
                            "src": "153049:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBPool_$4312",
                              "typeString": "contract IBPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 5015,
                              "name": "IBPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4312,
                              "src": "153049:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5020,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5018,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5004,
                              "src": "153071:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5017,
                            "name": "IBPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "153064:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                              "typeString": "type(contract IBPool)"
                            }
                          },
                          "id": 5019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153064:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBPool_$4312",
                            "typeString": "contract IBPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "153049:33:0"
                      },
                      {
                        "assignments": [
                          5022
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5022,
                            "mutability": "mutable",
                            "name": "availableSwapOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5126,
                            "src": "153215:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5021,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "153215:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5031,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5024,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5004,
                              "src": "153264:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5027,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5000,
                                  "src": "153284:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 5026,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "153276:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5025,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "153276:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 5028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153276:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5029,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5002,
                              "src": "153301:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5023,
                            "name": "getSwapOutValueLocker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5587,
                            "src": "153242:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address,address) view returns (uint256)"
                            }
                          },
                          "id": 5030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153242:71:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "153215:98:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5038,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "153402:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                ],
                                "id": 5037,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "153394:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5036,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "153394:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 5039,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153394:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5042,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5002,
                                  "src": "153425:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5040,
                                  "name": "bPool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5016,
                                  "src": "153409:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBPool_$4312",
                                    "typeString": "contract IBPool"
                                  }
                                },
                                "id": 5041,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4191,
                                "src": "153409:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 5043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153409:28:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5033,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5002,
                                  "src": "153376:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5032,
                                "name": "IStakeLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4104,
                                "src": "153363:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IStakeLocker_$4104_$",
                                  "typeString": "type(contract IStakeLocker)"
                                }
                              },
                              "id": 5034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153363:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeLocker_$4104",
                                "typeString": "contract IStakeLocker"
                              }
                            },
                            "id": 5035,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pull",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4030,
                            "src": "153363:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 5044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153363:75:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5045,
                        "nodeType": "ExpressionStatement",
                        "src": "153363:75:0"
                      },
                      {
                        "assignments": [
                          5047
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5047,
                            "mutability": "mutable",
                            "name": "preBurnLiquidityAssetBal",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5126,
                            "src": "153524:32:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5046,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "153524:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5055,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5052,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "153592:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                ],
                                "id": 5051,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "153584:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5050,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "153584:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 5053,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153584:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5048,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5000,
                              "src": "153559:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 5049,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16,
                            "src": "153559:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153559:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "153524:74:0"
                      },
                      {
                        "assignments": [
                          5057
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5057,
                            "mutability": "mutable",
                            "name": "preBurnBptBal",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5126,
                            "src": "153608:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5056,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "153608:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5065,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5062,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "153667:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                ],
                                "id": 5061,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "153659:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5060,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "153659:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 5063,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153659:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5058,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5016,
                              "src": "153643:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5059,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4191,
                            "src": "153643:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153643:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "153608:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5071,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5000,
                                  "src": "153810:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 5070,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "153802:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5069,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "153802:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 5072,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153802:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5075,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5073,
                                  "name": "availableSwapOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5022,
                                  "src": "153839:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 5074,
                                  "name": "defaultSuffered",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5006,
                                  "src": "153859:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "153839:35:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "id": 5077,
                                "name": "availableSwapOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5022,
                                "src": "153895:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5078,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "153839:72:0",
                              "trueExpression": {
                                "argumentTypes": null,
                                "id": 5076,
                                "name": "defaultSuffered",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5006,
                                "src": "153877:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5079,
                              "name": "preBurnBptBal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5057,
                              "src": "153968:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5066,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5016,
                              "src": "153759:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5068,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "exitswapExternAmountOut",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4311,
                            "src": "153759:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256,uint256) external returns (uint256)"
                            }
                          },
                          "id": 5080,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153759:232:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5081,
                        "nodeType": "ExpressionStatement",
                        "src": "153759:232:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5082,
                            "name": "postBurnBptBal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5011,
                            "src": "154051:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5087,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "154092:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_PoolLib_$5865",
                                      "typeString": "library PoolLib"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_PoolLib_$5865",
                                      "typeString": "library PoolLib"
                                    }
                                  ],
                                  "id": 5086,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "154084:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5085,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "154084:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 5088,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "154084:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5083,
                                "name": "bPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5016,
                                "src": "154068:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IBPool_$4312",
                                  "typeString": "contract IBPool"
                                }
                              },
                              "id": 5084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4191,
                              "src": "154068:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 5089,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "154068:30:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "154051:47:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5091,
                        "nodeType": "ExpressionStatement",
                        "src": "154051:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5092,
                            "name": "bptsBurned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5009,
                            "src": "154108:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5095,
                                "name": "postBurnBptBal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5011,
                                "src": "154143:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5093,
                                "name": "preBurnBptBal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5057,
                                "src": "154125:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5094,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "154125:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "154125:33:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "154108:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5098,
                        "nodeType": "ExpressionStatement",
                        "src": "154108:50:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5102,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5002,
                              "src": "154183:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5103,
                              "name": "postBurnBptBal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5011,
                              "src": "154196:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5099,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5016,
                              "src": "154168:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5101,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4165,
                            "src": "154168:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 5104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "154168:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5105,
                        "nodeType": "ExpressionStatement",
                        "src": "154168:43:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5106,
                            "name": "liquidityAssetRecoveredFromBurn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5013,
                            "src": "154221:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5115,
                                "name": "preBurnLiquidityAssetBal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5047,
                                "src": "154299:24:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 5111,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -28,
                                        "src": "154288:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_PoolLib_$5865",
                                          "typeString": "library PoolLib"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_PoolLib_$5865",
                                          "typeString": "library PoolLib"
                                        }
                                      ],
                                      "id": 5110,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "154280:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 5109,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "154280:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 5112,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "154280:13:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5107,
                                    "name": "liquidityAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5000,
                                    "src": "154255:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$77",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 5108,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balanceOf",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 16,
                                  "src": "154255:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view external returns (uint256)"
                                  }
                                },
                                "id": 5113,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "154255:39:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5114,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "154255:43:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5116,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "154255:69:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "154221:103:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5118,
                        "nodeType": "ExpressionStatement",
                        "src": "154221:103:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5123,
                              "name": "bptsBurned",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5009,
                              "src": "154373:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5120,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5002,
                                  "src": "154347:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5119,
                                "name": "IStakeLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4104,
                                "src": "154334:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IStakeLocker_$4104_$",
                                  "typeString": "type(contract IStakeLocker)"
                                }
                              },
                              "id": 5121,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "154334:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeLocker_$4104",
                                "typeString": "contract IStakeLocker"
                              }
                            },
                            "id": 5122,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updateLosses",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4036,
                            "src": "154334:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256) external"
                            }
                          },
                          "id": 5124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "154334:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5125,
                        "nodeType": "ExpressionStatement",
                        "src": "154334:50:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4998,
                    "nodeType": "StructuredDocumentation",
                    "src": "151974:739:0",
                    "text": "@dev    Helper function used by Pool `claim` function, for when if a default has occurred.\n@param  liquidityAsset                  The IERC20 of Liquidity Asset.\n@param  stakeLocker                     The address of StakeLocker.\n@param  stakeAsset                      The address of BPTs.\n@param  defaultSuffered                 The amount of shortfall in defaulted Loan after liquidation.\n@return bptsBurned                      The amount of BPTs burned to cover shortfall.\n@return postBurnBptBal                  The amount of BPTs returned to StakeLocker after burn.\n@return liquidityAssetRecoveredFromBurn The amount of Liquidity Asset recovered from burn."
                  },
                  "functionSelector": "0715b090",
                  "id": 5127,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "handleDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5007,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5000,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152750:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4999,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "152750:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5002,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152782:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5001,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "152782:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5004,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152811:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5003,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "152811:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5006,
                        "mutability": "mutable",
                        "name": "defaultSuffered",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152839:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5005,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "152839:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "152740:128:0"
                  },
                  "returnParameters": {
                    "id": 5014,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5009,
                        "mutability": "mutable",
                        "name": "bptsBurned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152916:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5008,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "152916:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5011,
                        "mutability": "mutable",
                        "name": "postBurnBptBal",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152948:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5010,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "152948:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5013,
                        "mutability": "mutable",
                        "name": "liquidityAssetRecoveredFromBurn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152984:39:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5012,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "152984:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "152902:131:0"
                  },
                  "scope": 5865,
                  "src": "152718:1724:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5212,
                    "nodeType": "Block",
                    "src": "155864:558:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5147,
                            "name": "poolDelegatePortion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5139,
                            "src": "155874:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5158,
                                  "name": "claimInfo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5132,
                                  "src": "155942:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                    "typeString": "uint256[7] calldata"
                                  }
                                },
                                "id": 5160,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "33",
                                  "id": 5159,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "155952:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "155942:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31305f303030",
                                    "id": 5155,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "155930:6:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10000_by_1",
                                      "typeString": "int_const 10000"
                                    },
                                    "value": "10_000"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_10000_by_1",
                                      "typeString": "int_const 10000"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 5152,
                                        "name": "delegateFee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5134,
                                        "src": "155913:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 5148,
                                          "name": "claimInfo",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5132,
                                          "src": "155896:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                            "typeString": "uint256[7] calldata"
                                          }
                                        },
                                        "id": 5150,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 5149,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "155906:1:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "155896:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 5151,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 791,
                                      "src": "155896:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5153,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "155896:29:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5154,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 808,
                                  "src": "155896:33:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5156,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "155896:41:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "155896:45:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "155896:59:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "155874:81:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5163,
                        "nodeType": "ExpressionStatement",
                        "src": "155874:81:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5164,
                            "name": "stakeLockerPortion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5141,
                            "src": "156013:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31305f303030",
                                "id": 5172,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "156068:6:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                "value": "10_000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5169,
                                    "name": "stakingFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5136,
                                    "src": "156052:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 5165,
                                      "name": "claimInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5132,
                                      "src": "156035:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                        "typeString": "uint256[7] calldata"
                                      }
                                    },
                                    "id": 5167,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 5166,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "156045:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "156035:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5168,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 791,
                                  "src": "156035:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5170,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "156035:28:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5171,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "div",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 808,
                              "src": "156035:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "156035:40:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "156013:62:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5175,
                        "nodeType": "ExpressionStatement",
                        "src": "156013:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5176,
                            "name": "principalClaim",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5143,
                            "src": "156142:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5186,
                                  "name": "claimInfo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5132,
                                  "src": "156194:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                    "typeString": "uint256[7] calldata"
                                  }
                                },
                                "id": 5188,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "35",
                                  "id": 5187,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "156204:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_5_by_1",
                                    "typeString": "int_const 5"
                                  },
                                  "value": "5"
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "156194:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 5181,
                                      "name": "claimInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5132,
                                      "src": "156176:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                        "typeString": "uint256[7] calldata"
                                      }
                                    },
                                    "id": 5183,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "34",
                                      "id": 5182,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "156186:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "156176:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 5177,
                                      "name": "claimInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5132,
                                      "src": "156159:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                        "typeString": "uint256[7] calldata"
                                      }
                                    },
                                    "id": 5179,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "32",
                                      "id": 5178,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "156169:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "156159:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5180,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 711,
                                  "src": "156159:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5184,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "156159:30:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5185,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "156159:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5189,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "156159:48:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "156142:65:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5191,
                        "nodeType": "ExpressionStatement",
                        "src": "156142:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5192,
                            "name": "interestClaim",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5145,
                            "src": "156293:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5208,
                                "name": "stakeLockerPortion",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5141,
                                "src": "156374:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "31305f303030",
                                        "id": 5204,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "156361:6:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10000_by_1",
                                          "typeString": "int_const 10000"
                                        },
                                        "value": "10_000"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_10000_by_1",
                                          "typeString": "int_const 10000"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5201,
                                            "name": "delegateFee",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5134,
                                            "src": "156344:11:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 5197,
                                              "name": "claimInfo",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5132,
                                              "src": "156327:9:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                                "typeString": "uint256[7] calldata"
                                              }
                                            },
                                            "id": 5199,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "31",
                                              "id": 5198,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "156337:1:0",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "156327:12:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 5200,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 791,
                                          "src": "156327:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 5202,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "156327:29:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 5203,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "div",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 808,
                                      "src": "156327:33:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5205,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "156327:41:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 5193,
                                      "name": "claimInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5132,
                                      "src": "156310:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                        "typeString": "uint256[7] calldata"
                                      }
                                    },
                                    "id": 5195,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 5194,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "156320:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "156310:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5196,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 728,
                                  "src": "156310:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5206,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "156310:59:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5207,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "156310:63:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5209,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "156310:83:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "156293:100:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5211,
                        "nodeType": "ExpressionStatement",
                        "src": "156293:100:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5128,
                    "nodeType": "StructuredDocumentation",
                    "src": "154448:1061:0",
                    "text": "@dev    Calculates portions of claim from DebtLocker to be used by Pool `claim` function.\n@param  claimInfo           [0] => Total Claimed, \n[1] => Interest Claimed, \n[2] => Principal Claimed, \n[3] => Fee Claimed, \n[4] => Excess Returned Claimed, \n[5] => Amount Recovered (from Liquidation), \n[6] => Default Suffered. \n@param  delegateFee         The portion of interest (basis points) that goes to the Pool Delegate.\n@param  stakingFee          The portion of interest (basis points) that goes to the StakeLocker.\n@return poolDelegatePortion The total funds to send to the Pool Delegate.\n@return stakeLockerPortion  The total funds to send to the StakeLocker.\n@return principalClaim      The total principal claim.\n@return interestClaim       The total interest claim."
                  },
                  "functionSelector": "3faa6c5d",
                  "id": 5213,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "calculateClaimAndPortions",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5132,
                        "mutability": "mutable",
                        "name": "claimInfo",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155558:29:0",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                          "typeString": "uint256[7]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 5129,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "155558:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5131,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 5130,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "155566:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "155558:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                            "typeString": "uint256[7]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5134,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155597:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155597:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5136,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155626:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5135,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155626:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "155548:102:0"
                  },
                  "returnParameters": {
                    "id": 5146,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5139,
                        "mutability": "mutable",
                        "name": "poolDelegatePortion",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155711:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5138,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155711:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5141,
                        "mutability": "mutable",
                        "name": "stakeLockerPortion",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155752:26:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5140,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155752:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5143,
                        "mutability": "mutable",
                        "name": "principalClaim",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155792:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5142,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155792:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5145,
                        "mutability": "mutable",
                        "name": "interestClaim",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155828:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5144,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155828:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "155697:162:0"
                  },
                  "scope": 5865,
                  "src": "155514:908:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5234,
                    "nodeType": "Block",
                    "src": "156822:114:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5230,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5224,
                                "name": "principalOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5218,
                                "src": "156840:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5226,
                                    "name": "globals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5216,
                                    "src": "156872:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 5227,
                                    "name": "liquidityAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5220,
                                    "src": "156881:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "313030",
                                    "id": 5228,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "156897:3:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_100_by_1",
                                      "typeString": "int_const 100"
                                    },
                                    "value": "100"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_100_by_1",
                                      "typeString": "int_const 100"
                                    }
                                  ],
                                  "id": 5225,
                                  "name": "_convertFromUsd",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5864,
                                  "src": "156856:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_contract$_IMapleGlobals_$2870_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (contract IMapleGlobals,address,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 5229,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "156856:45:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "156840:61:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a5052494e434950414c5f4f55545354414e44494e47",
                              "id": 5231,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "156903:25:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f1660448eef738a0342c15f653eea57cc0a10caeeed8d9c8006721227b9f78a3",
                                "typeString": "literal_string \"P:PRINCIPAL_OUTSTANDING\""
                              },
                              "value": "P:PRINCIPAL_OUTSTANDING"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f1660448eef738a0342c15f653eea57cc0a10caeeed8d9c8006721227b9f78a3",
                                "typeString": "literal_string \"P:PRINCIPAL_OUTSTANDING\""
                              }
                            ],
                            "id": 5223,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "156832:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "156832:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5233,
                        "nodeType": "ExpressionStatement",
                        "src": "156832:97:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5214,
                    "nodeType": "StructuredDocumentation",
                    "src": "156428:276:0",
                    "text": "@dev   Checks that the deactivation is allowed.\n@param globals        The instance of a MapleGlobals.\n@param principalOut   The amount of funds that are already funded to Loans.\n@param liquidityAsset The Liquidity Asset of the Pool."
                  },
                  "functionSelector": "abbedb40",
                  "id": 5235,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "validateDeactivation",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5221,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5216,
                        "mutability": "mutable",
                        "name": "globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5235,
                        "src": "156739:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 5215,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "156739:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5218,
                        "mutability": "mutable",
                        "name": "principalOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5235,
                        "src": "156762:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5217,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "156762:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5220,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5235,
                        "src": "156784:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5219,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "156784:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "156738:69:0"
                  },
                  "returnParameters": {
                    "id": 5222,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "156822:0:0"
                  },
                  "scope": 5865,
                  "src": "156709:227:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5293,
                    "nodeType": "Block",
                    "src": "157743:449:0",
                    "statements": [
                      {
                        "assignments": [
                          5250
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5250,
                            "mutability": "mutable",
                            "name": "prevDate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5293,
                            "src": "157753:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5249,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "157753:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5254,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 5251,
                            "name": "depositDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5240,
                            "src": "157772:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5253,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 5252,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5246,
                            "src": "157784:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "157772:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "157753:39:0"
                      },
                      {
                        "assignments": [
                          5256
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5256,
                            "mutability": "mutable",
                            "name": "newDate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5293,
                            "src": "157947:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5255,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "157947:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5281,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5262,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5259,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 5257,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5242,
                                    "src": "157966:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5258,
                                    "name": "amt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5244,
                                    "src": "157976:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "157966:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 5260,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "157965:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5261,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "157983:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "157965:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 5279,
                            "name": "prevDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5250,
                            "src": "158085:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "157965:128:0",
                          "trueExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5276,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 5274,
                                      "name": "balance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5242,
                                      "src": "158055:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 5275,
                                      "name": "amt",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5244,
                                      "src": "158065:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "158055:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 5271,
                                        "name": "amt",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5244,
                                        "src": "158046:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5268,
                                            "name": "prevDate",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5250,
                                            "src": "158032:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 5265,
                                              "name": "block",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -4,
                                              "src": "158012:5:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_block",
                                                "typeString": "block"
                                              }
                                            },
                                            "id": 5266,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "158012:15:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 5267,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "sub",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 728,
                                          "src": "158012:19:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 5269,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "158012:29:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 5270,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 791,
                                      "src": "158012:33:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5272,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "158012:38:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5273,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 808,
                                  "src": "158012:42:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5277,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "158012:57:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5263,
                                "name": "prevDate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5250,
                                "src": "157999:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5264,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "157999:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "157999:71:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "157947:146:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 5282,
                              "name": "depositDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5240,
                              "src": "158104:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5284,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 5283,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5246,
                              "src": "158116:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "158104:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 5285,
                            "name": "newDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5256,
                            "src": "158127:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "158104:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5287,
                        "nodeType": "ExpressionStatement",
                        "src": "158104:30:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5289,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5246,
                              "src": "158168:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5290,
                              "name": "newDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5256,
                              "src": "158177:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5288,
                            "name": "DepositDateUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4816,
                            "src": "158149:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "158149:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5292,
                        "nodeType": "EmitStatement",
                        "src": "158144:41:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5236,
                    "nodeType": "StructuredDocumentation",
                    "src": "157096:510:0",
                    "text": "@dev   Updates the effective deposit date based on how much new capital has been added. \n@dev   If more capital is added, the deposit date moves closer to the current timestamp. \n@dev   It emits a `DepositDateUpdated` event. \n@param depositDate Storage reference to mapping of effective deposit dates.\n@param balance     Balance of account depositing.\n@param amt         Total deposit amount.\n@param account     Address of account depositing."
                  },
                  "id": 5294,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateDepositDate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5247,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5240,
                        "mutability": "mutable",
                        "name": "depositDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5294,
                        "src": "157638:47:0",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                          "id": 5239,
                          "keyType": {
                            "id": 5237,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "157646:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Mapping",
                          "src": "157638:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          },
                          "valueType": {
                            "id": 5238,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "157657:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5242,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5294,
                        "src": "157687:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5241,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "157687:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5244,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5294,
                        "src": "157704:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5243,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "157704:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5246,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5294,
                        "src": "157717:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5245,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "157717:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "157637:96:0"
                  },
                  "returnParameters": {
                    "id": 5248,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "157743:0:0"
                  },
                  "scope": 5865,
                  "src": "157611:581:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5321,
                    "nodeType": "Block",
                    "src": "158604:136:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5307,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5305,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5299,
                                "src": "158622:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 5306,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5297,
                                "src": "158628:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "158622:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f5245434549564552",
                              "id": 5308,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "158650:20:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_32101c84eaf8dbb6c64ea0e6c0978f210564433c86de069dba3ee31f1ab9b71c",
                                "typeString": "literal_string \"P:INVALID_RECEIVER\""
                              },
                              "value": "P:INVALID_RECEIVER"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_32101c84eaf8dbb6c64ea0e6c0978f210564433c86de069dba3ee31f1ab9b71c",
                                "typeString": "literal_string \"P:INVALID_RECEIVER\""
                              }
                            ],
                            "id": 5304,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "158614:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "158614:57:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5310,
                        "nodeType": "ExpressionStatement",
                        "src": "158614:57:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5317,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5312,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5301,
                                "src": "158689:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 5315,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "158707:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5314,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "158699:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 5313,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "158699:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 5316,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "158699:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "158689:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f414d54",
                              "id": 5318,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "158717:15:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_35dfc62dbd2c5c95c634fb123c8001e68edffafe0cba8e0d0f9840c7f1ae4df1",
                                "typeString": "literal_string \"P:INVALID_AMT\""
                              },
                              "value": "P:INVALID_AMT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_35dfc62dbd2c5c95c634fb123c8001e68edffafe0cba8e0d0f9840c7f1ae4df1",
                                "typeString": "literal_string \"P:INVALID_AMT\""
                              }
                            ],
                            "id": 5311,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "158681:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "158681:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5320,
                        "nodeType": "ExpressionStatement",
                        "src": "158681:52:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5295,
                    "nodeType": "StructuredDocumentation",
                    "src": "158198:310:0",
                    "text": "@dev Performs all necessary checks for a `transferByCustodian` call. \n@dev From and to must always be equal. \n@param from   The address of the source of funds.\n@param to     The address of the destination of funds.\n@param amount The amount of funds transfer."
                  },
                  "functionSelector": "1b4c9031",
                  "id": 5322,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodianChecks",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5302,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5297,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5322,
                        "src": "158548:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5296,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "158548:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5299,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5322,
                        "src": "158562:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5298,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "158562:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5301,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5322,
                        "src": "158574:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5300,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "158574:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "158547:42:0"
                  },
                  "returnParameters": {
                    "id": 5303,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "158604:0:0"
                  },
                  "scope": 5865,
                  "src": "158513:227:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5361,
                    "nodeType": "Block",
                    "src": "159287:204:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5340,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5335,
                                "name": "custodian",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5325,
                                "src": "159305:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 5338,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "159326:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5337,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "159318:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5336,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "159318:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 5339,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "159318:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "159305:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f435553544f4449414e",
                              "id": 5341,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "159334:21:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4870118a565f6fda1304d271885b77375c0689649970e3d9cc94baf3076be90e",
                                "typeString": "literal_string \"P:INVALID_CUSTODIAN\""
                              },
                              "value": "P:INVALID_CUSTODIAN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4870118a565f6fda1304d271885b77375c0689649970e3d9cc94baf3076be90e",
                                "typeString": "literal_string \"P:INVALID_CUSTODIAN\""
                              }
                            ],
                            "id": 5334,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "159297:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5342,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "159297:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5343,
                        "nodeType": "ExpressionStatement",
                        "src": "159297:59:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5350,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5345,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5327,
                                "src": "159374:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 5348,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "159395:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5347,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "159387:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 5346,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "159387:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 5349,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "159387:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "159374:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f414d54",
                              "id": 5351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "159403:15:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_35dfc62dbd2c5c95c634fb123c8001e68edffafe0cba8e0d0f9840c7f1ae4df1",
                                "typeString": "literal_string \"P:INVALID_AMT\""
                              },
                              "value": "P:INVALID_AMT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_35dfc62dbd2c5c95c634fb123c8001e68edffafe0cba8e0d0f9840c7f1ae4df1",
                                "typeString": "literal_string \"P:INVALID_AMT\""
                              }
                            ],
                            "id": 5344,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "159366:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "159366:53:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5353,
                        "nodeType": "ExpressionStatement",
                        "src": "159366:53:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5357,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5355,
                                "name": "newTotalAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5329,
                                "src": "159437:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 5356,
                                "name": "fdtBal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5331,
                                "src": "159458:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "159437:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e5355465f42414c414e4345",
                              "id": 5358,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "159466:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cd7815bea7c8ea5b1d656ae6595c8d8e090f57ddc69b1d1bc8aa9b5e22ff6c27",
                                "typeString": "literal_string \"P:INSUF_BALANCE\""
                              },
                              "value": "P:INSUF_BALANCE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cd7815bea7c8ea5b1d656ae6595c8d8e090f57ddc69b1d1bc8aa9b5e22ff6c27",
                                "typeString": "literal_string \"P:INSUF_BALANCE\""
                              }
                            ],
                            "id": 5354,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "159429:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "159429:55:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5360,
                        "nodeType": "ExpressionStatement",
                        "src": "159429:55:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5323,
                    "nodeType": "StructuredDocumentation",
                    "src": "158746:404:0",
                    "text": "@dev  Performs all necessary checks for an `increaseCustodyAllowance` call.\n@param custodian         The custodian where the funds will be locked to.\n@param amount            The additional amount to custody.\n@param newTotalAllowance The new total amount in custody, for some account.\n@param fdtBal            The the total FDT balance of some account."
                  },
                  "functionSelector": "297e7bf7",
                  "id": 5362,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowanceChecks",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5332,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5325,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5362,
                        "src": "159195:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5324,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "159195:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5327,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5362,
                        "src": "159214:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5326,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "159214:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5329,
                        "mutability": "mutable",
                        "name": "newTotalAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5362,
                        "src": "159230:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5328,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "159230:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5331,
                        "mutability": "mutable",
                        "name": "fdtBal",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5362,
                        "src": "159257:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5330,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "159257:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "159194:78:0"
                  },
                  "returnParameters": {
                    "id": 5333,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "159287:0:0"
                  },
                  "scope": 5865,
                  "src": "159155:336:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5413,
                    "nodeType": "Block",
                    "src": "160076:243:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5378,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5373,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "160094:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 5374,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "160094:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5375,
                                    "name": "globals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5369,
                                    "src": "160108:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  "id": 5376,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "governor",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2485,
                                  "src": "160108:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 5377,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "160108:18:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "160094:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4e4f545f474f56",
                              "id": 5379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "160128:11:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_af2372b792754d0b43b9adfed9e6d3e70a8603ec1035bd9ad3143c3e85d3800f",
                                "typeString": "literal_string \"P:NOT_GOV\""
                              },
                              "value": "P:NOT_GOV"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_af2372b792754d0b43b9adfed9e6d3e70a8603ec1035bd9ad3143c3e85d3800f",
                                "typeString": "literal_string \"P:NOT_GOV\""
                              }
                            ],
                            "id": 5372,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "160086:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160086:54:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5381,
                        "nodeType": "ExpressionStatement",
                        "src": "160086:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 5392,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 5385,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5383,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5365,
                                  "src": "160158:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 5384,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5367,
                                  "src": "160167:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "160158:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 5391,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5386,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5365,
                                  "src": "160185:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 5389,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "160202:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 5388,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "160194:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 5387,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "160194:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 5390,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "160194:10:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "160185:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "160158:46:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f544f4b454e",
                              "id": 5393,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "160206:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_56434096b44064c18704dfff2461e99fb0013b6a3039dc2649fc7f44595494e9",
                                "typeString": "literal_string \"P:INVALID_TOKEN\""
                              },
                              "value": "P:INVALID_TOKEN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_56434096b44064c18704dfff2461e99fb0013b6a3039dc2649fc7f44595494e9",
                                "typeString": "literal_string \"P:INVALID_TOKEN\""
                              }
                            ],
                            "id": 5382,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "160150:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160150:74:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5395,
                        "nodeType": "ExpressionStatement",
                        "src": "160150:74:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 5400,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "160261:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "160261:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5408,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "160305:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_PoolLib_$5865",
                                        "typeString": "library PoolLib"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_PoolLib_$5865",
                                        "typeString": "library PoolLib"
                                      }
                                    ],
                                    "id": 5407,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "160297:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 5406,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "160297:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 5409,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "160297:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5403,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5365,
                                      "src": "160280:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 5402,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 77,
                                    "src": "160273:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 5404,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "160273:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 5405,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16,
                                "src": "160273:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 5410,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "160273:38:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5397,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5365,
                                  "src": "160241:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5396,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 77,
                                "src": "160234:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 5398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "160234:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 5399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4601,
                            "src": "160234:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$77_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 5411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160234:78:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5412,
                        "nodeType": "ExpressionStatement",
                        "src": "160234:78:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5363,
                    "nodeType": "StructuredDocumentation",
                    "src": "159621:357:0",
                    "text": "@dev   Transfers any locked funds to the Governor. \n@dev    \\Only the Governor can call this function. \n@param token          The address of the token to be reclaimed.\n@param liquidityAsset The address of Liquidity Asset that is supported by the Pool.\n@param globals        The instance of a MapleGlobals."
                  },
                  "functionSelector": "a89d5ddb",
                  "id": 5414,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "reclaimERC20",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5370,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5365,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5414,
                        "src": "160005:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5364,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "160005:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5367,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5414,
                        "src": "160020:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5366,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "160020:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5369,
                        "mutability": "mutable",
                        "name": "globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5414,
                        "src": "160044:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 5368,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "160044:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "160004:62:0"
                  },
                  "returnParameters": {
                    "id": 5371,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "160076:0:0"
                  },
                  "scope": 5865,
                  "src": "159983:336:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5470,
                    "nodeType": "Block",
                    "src": "160601:275:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5425,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5419,
                                "src": "160619:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 5426,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "160624:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "160619:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4449565f5a45524f",
                              "id": 5428,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "160627:12:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_83b98fd306f35608b66d6951b168382fb8b9fbd2075d664f1766a74045809297",
                                "typeString": "literal_string \"P:DIV_ZERO\""
                              },
                              "value": "P:DIV_ZERO"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_83b98fd306f35608b66d6951b168382fb8b9fbd2075d664f1766a74045809297",
                                "typeString": "literal_string \"P:DIV_ZERO\""
                              }
                            ],
                            "id": 5424,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "160611:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160611:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5430,
                        "nodeType": "ExpressionStatement",
                        "src": "160611:29:0"
                      },
                      {
                        "assignments": [
                          5432
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5432,
                            "mutability": "mutable",
                            "name": "c0",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5470,
                            "src": "160650:10:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5431,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "160650:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5436,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5433,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5417,
                            "src": "160663:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5434,
                            "name": "WAD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4799,
                            "src": "160667:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "160663:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "160650:20:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 5446,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5440,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5438,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5417,
                                  "src": "160688:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5439,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "160693:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "160688:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5445,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 5441,
                                    "name": "c0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5432,
                                    "src": "160698:2:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5442,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5417,
                                    "src": "160703:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "160698:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 5444,
                                  "name": "WAD",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4799,
                                  "src": "160708:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "160698:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "160688:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4449565f494e5445524e414c",
                              "id": 5447,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "160713:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_22d4a06107960fb2e43ae274d586050b37cbee5b63ee5da88cce66faa36144e8",
                                "typeString": "literal_string \"P:DIV_INTERNAL\""
                              },
                              "value": "P:DIV_INTERNAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_22d4a06107960fb2e43ae274d586050b37cbee5b63ee5da88cce66faa36144e8",
                                "typeString": "literal_string \"P:DIV_INTERNAL\""
                              }
                            ],
                            "id": 5437,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "160680:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160680:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5449,
                        "nodeType": "ExpressionStatement",
                        "src": "160680:50:0"
                      },
                      {
                        "assignments": [
                          5451
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5451,
                            "mutability": "mutable",
                            "name": "c1",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5470,
                            "src": "160758:10:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5450,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "160758:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5458,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5452,
                            "name": "c0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5432,
                            "src": "160771:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5455,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5453,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5419,
                                  "src": "160777:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "32",
                                  "id": 5454,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "160781:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "160777:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 5456,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "160776:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "160771:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "160758:25:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5462,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5460,
                                "name": "c1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "160801:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 5461,
                                "name": "c0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5432,
                                "src": "160807:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "160801:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4449565f494e5445524e414c",
                              "id": 5463,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "160811:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_22d4a06107960fb2e43ae274d586050b37cbee5b63ee5da88cce66faa36144e8",
                                "typeString": "literal_string \"P:DIV_INTERNAL\""
                              },
                              "value": "P:DIV_INTERNAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_22d4a06107960fb2e43ae274d586050b37cbee5b63ee5da88cce66faa36144e8",
                                "typeString": "literal_string \"P:DIV_INTERNAL\""
                              }
                            ],
                            "id": 5459,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "160793:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160793:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5465,
                        "nodeType": "ExpressionStatement",
                        "src": "160793:35:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5466,
                            "name": "c1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5451,
                            "src": "160863:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5467,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5419,
                            "src": "160868:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "160863:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5423,
                        "id": 5469,
                        "nodeType": "Return",
                        "src": "160856:13:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5415,
                    "nodeType": "StructuredDocumentation",
                    "src": "160419:108:0",
                    "text": "@dev Official Balancer pool bdiv() function. Does synthetic float with 10^-18 precision."
                  },
                  "id": 5471,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_bdiv",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5420,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5417,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5471,
                        "src": "160547:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5416,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "160547:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5419,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5471,
                        "src": "160558:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5418,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "160558:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "160546:22:0"
                  },
                  "returnParameters": {
                    "id": 5423,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5422,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5471,
                        "src": "160592:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "160592:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "160591:9:0"
                  },
                  "scope": 5865,
                  "src": "160532:344:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5536,
                    "nodeType": "Block",
                    "src": "161727:805:0",
                    "statements": [
                      {
                        "assignments": [
                          5486
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5486,
                            "mutability": "mutable",
                            "name": "bPool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5536,
                            "src": "161737:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBPool_$4312",
                              "typeString": "contract IBPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 5485,
                              "name": "IBPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4312,
                              "src": "161737:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5490,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5488,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5474,
                              "src": "161759:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5487,
                            "name": "IBPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "161752:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                              "typeString": "type(contract IBPool)"
                            }
                          },
                          "id": 5489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "161752:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBPool_$4312",
                            "typeString": "contract IBPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "161737:29:0"
                      },
                      {
                        "assignments": [
                          5492
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5492,
                            "mutability": "mutable",
                            "name": "amountStakedBPT",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5536,
                            "src": "162000:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5491,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "162000:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5499,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5497,
                              "name": "staker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5478,
                              "src": "162062:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5494,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5480,
                                  "src": "162039:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5493,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 77,
                                "src": "162032:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 5495,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "162032:19:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 5496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16,
                            "src": "162032:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5498,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "162032:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "162000:69:0"
                      },
                      {
                        "assignments": [
                          5501
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5501,
                            "mutability": "mutable",
                            "name": "totalSupplyBPT",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5536,
                            "src": "162079:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5500,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "162079:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5507,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5503,
                                  "name": "_bPool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5474,
                                  "src": "162118:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5502,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 77,
                                "src": "162111:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 5504,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "162111:14:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 5505,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "totalSupply",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8,
                            "src": "162111:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "162111:28:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "162079:60:0"
                      },
                      {
                        "assignments": [
                          5509
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5509,
                            "mutability": "mutable",
                            "name": "liquidityAssetBalance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5536,
                            "src": "162149:29:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5508,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "162149:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5514,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5512,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "162198:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5510,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5486,
                              "src": "162181:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5511,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getBalance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4223,
                            "src": "162181:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5513,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "162181:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "162149:64:0"
                      },
                      {
                        "assignments": [
                          5516
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5516,
                            "mutability": "mutable",
                            "name": "liquidityAssetWeight",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5536,
                            "src": "162223:28:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5515,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "162223:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5521,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5519,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "162281:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5517,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5486,
                              "src": "162255:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5518,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getNormalizedWeight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4230,
                            "src": "162255:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5520,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "162255:41:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "162223:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5533,
                              "name": "WAD",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4799,
                              "src": "162521:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5528,
                                      "name": "liquidityAssetBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5509,
                                      "src": "162471:21:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 5529,
                                      "name": "liquidityAssetWeight",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5516,
                                      "src": "162494:20:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 5527,
                                    "name": "_bdiv",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5471,
                                    "src": "162465:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5530,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "162465:50:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5523,
                                      "name": "amountStakedBPT",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5492,
                                      "src": "162428:15:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 5524,
                                      "name": "totalSupplyBPT",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5501,
                                      "src": "162445:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 5522,
                                    "name": "_bdiv",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5471,
                                    "src": "162422:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5525,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "162422:38:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5526,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "162422:42:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5531,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "162422:94:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5532,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 808,
                            "src": "162422:98:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "162422:103:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5484,
                        "id": 5535,
                        "nodeType": "Return",
                        "src": "162415:110:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5472,
                    "nodeType": "StructuredDocumentation",
                    "src": "160882:677:0",
                    "text": "@dev    Calculates the value of BPT in units of Liquidity Asset. \n@dev    Vulnerable to flash-loan attacks where the attacker can artificially inflate the BPT price by swapping a large amount \nof Liquidity Asset into the Pool and swapping back after this function is called. \n@param  _bPool         The address of Balancer pool.\n@param  liquidityAsset The asset used by Pool for liquidity to fund Loans.\n@param  staker         The address that deposited BPTs to StakeLocker.\n@param  stakeLocker    The contract that escrows the  BPTs deposited by Staker.\n@return The USDC value of Staker BPTs."
                  },
                  "functionSelector": "681cb10a",
                  "id": 5537,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "BPTVal",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5481,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5474,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5537,
                        "src": "161589:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5473,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "161589:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5476,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5537,
                        "src": "161613:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5475,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "161613:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5478,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5537,
                        "src": "161645:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5477,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "161645:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5480,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5537,
                        "src": "161669:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5479,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "161669:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "161579:115:0"
                  },
                  "returnParameters": {
                    "id": 5484,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5483,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5537,
                        "src": "161718:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5482,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "161718:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "161717:9:0"
                  },
                  "scope": 5865,
                  "src": "161564:968:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5562,
                    "nodeType": "Block",
                    "src": "163220:103:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5552,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5540,
                              "src": "163254:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5553,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5542,
                              "src": "163262:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5558,
                                  "name": "staker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5544,
                                  "src": "163308:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5555,
                                      "name": "stakeLocker",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5546,
                                      "src": "163285:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 5554,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 77,
                                    "src": "163278:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 5556,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "163278:19:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 5557,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16,
                                "src": "163278:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 5559,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "163278:37:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5551,
                            "name": "_getSwapOutValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5668,
                            "src": "163237:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,address,uint256) view returns (uint256)"
                            }
                          },
                          "id": 5560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "163237:79:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5550,
                        "id": 5561,
                        "nodeType": "Return",
                        "src": "163230:86:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5538,
                    "nodeType": "StructuredDocumentation",
                    "src": "162538:507:0",
                    "text": "@dev    Calculates Liquidity Asset swap out value of staker BPT balance escrowed in StakeLocker.\n@param  _bPool         The Balancer pool that issues the BPTs.\n@param  liquidityAsset The Swap out asset (e.g. USDC) to receive when burning BPTs.\n@param  staker         The address that deposited BPTs to StakeLocker.\n@param  stakeLocker    The contract that escrows BPTs deposited by Staker.\n@return liquidityAsset The swap out value of staker BPTs."
                  },
                  "functionSelector": "ee7375be",
                  "id": 5563,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSwapOutValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5547,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5540,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5563,
                        "src": "163084:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5539,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163084:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5542,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5563,
                        "src": "163108:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5541,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163108:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5544,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5563,
                        "src": "163140:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5543,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163140:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5546,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5563,
                        "src": "163164:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5545,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163164:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "163074:115:0"
                  },
                  "returnParameters": {
                    "id": 5550,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5549,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5563,
                        "src": "163211:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5548,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "163211:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "163210:9:0"
                  },
                  "scope": 5865,
                  "src": "163050:273:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5586,
                    "nodeType": "Block",
                    "src": "163919:103:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5576,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5566,
                              "src": "163953:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5577,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5568,
                              "src": "163961:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5582,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5570,
                                  "src": "164002:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5579,
                                      "name": "_bPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5566,
                                      "src": "163984:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 5578,
                                    "name": "IBPool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4312,
                                    "src": "163977:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                                      "typeString": "type(contract IBPool)"
                                    }
                                  },
                                  "id": 5580,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "163977:14:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBPool_$4312",
                                    "typeString": "contract IBPool"
                                  }
                                },
                                "id": 5581,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4191,
                                "src": "163977:24:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 5583,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "163977:37:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5575,
                            "name": "_getSwapOutValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5668,
                            "src": "163936:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,address,uint256) view returns (uint256)"
                            }
                          },
                          "id": 5584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "163936:79:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5574,
                        "id": 5585,
                        "nodeType": "Return",
                        "src": "163929:86:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5564,
                    "nodeType": "StructuredDocumentation",
                    "src": "163329:433:0",
                    "text": "@dev    Calculates Liquidity Asset swap out value of entire BPT balance escrowed in StakeLocker.\n@param  _bPool         The Balancer pool that issues the BPTs.\n@param  liquidityAsset The swap out asset (e.g. USDC) to receive when burning BPTs.\n@param  stakeLocker    The contract that escrows BPTs deposited by Staker.\n@return liquidityAsset The swap out value of StakeLocker BPTs."
                  },
                  "functionSelector": "4119bdfa",
                  "id": 5587,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSwapOutValueLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5571,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5566,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5587,
                        "src": "163807:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5565,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163807:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5568,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5587,
                        "src": "163831:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5567,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163831:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5570,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5587,
                        "src": "163863:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5569,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163863:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "163797:91:0"
                  },
                  "returnParameters": {
                    "id": 5574,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5573,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5587,
                        "src": "163910:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5572,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "163910:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "163909:9:0"
                  },
                  "scope": 5865,
                  "src": "163767:255:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5667,
                    "nodeType": "Block",
                    "src": "164178:1004:0",
                    "statements": [
                      {
                        "assignments": [
                          5599
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5599,
                            "mutability": "mutable",
                            "name": "bPool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164237:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBPool_$4312",
                              "typeString": "contract IBPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 5598,
                              "name": "IBPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4312,
                              "src": "164237:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5603,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5601,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5589,
                              "src": "164270:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5600,
                            "name": "IBPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "164263:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                              "typeString": "type(contract IBPool)"
                            }
                          },
                          "id": 5602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164263:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBPool_$4312",
                            "typeString": "contract IBPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164237:40:0"
                      },
                      {
                        "assignments": [
                          5605
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5605,
                            "mutability": "mutable",
                            "name": "tokenBalanceOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164287:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5604,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164287:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5610,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5608,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5591,
                              "src": "164330:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5606,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164313:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getBalance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4223,
                            "src": "164313:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164313:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164287:58:0"
                      },
                      {
                        "assignments": [
                          5612
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5612,
                            "mutability": "mutable",
                            "name": "tokenWeightOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164355:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5611,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164355:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5617,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5615,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5591,
                              "src": "164409:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5613,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164381:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getDenormalizedWeight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4237,
                            "src": "164381:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164381:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164355:69:0"
                      },
                      {
                        "assignments": [
                          5619
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5619,
                            "mutability": "mutable",
                            "name": "poolSupply",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164434:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5618,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164434:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5623,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5620,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164460:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "totalSupply",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4252,
                            "src": "164460:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5622,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164460:19:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164434:45:0"
                      },
                      {
                        "assignments": [
                          5625
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5625,
                            "mutability": "mutable",
                            "name": "totalWeight",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164489:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5624,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164489:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5629,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5626,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164515:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5627,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getTotalDenormalizedWeight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4242,
                            "src": "164515:32:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164515:34:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164489:60:0"
                      },
                      {
                        "assignments": [
                          5631
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5631,
                            "mutability": "mutable",
                            "name": "swapFee",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164559:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5630,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164559:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5635,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5632,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164585:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5633,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getSwapFee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4247,
                            "src": "164585:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164585:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164559:44:0"
                      },
                      {
                        "assignments": [
                          5637
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5637,
                            "mutability": "mutable",
                            "name": "tokenAmountOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164701:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5636,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164701:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5647,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5640,
                              "name": "tokenBalanceOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5605,
                              "src": "164770:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5641,
                              "name": "tokenWeightOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5612,
                              "src": "164799:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5642,
                              "name": "poolSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5619,
                              "src": "164827:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5643,
                              "name": "totalWeight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5625,
                              "src": "164851:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5644,
                              "name": "poolAmountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5593,
                              "src": "164876:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5645,
                              "name": "swapFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5631,
                              "src": "164902:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5638,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164726:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5639,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "calcSingleOutGivenPoolIn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4283,
                            "src": "164726:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure external returns (uint256)"
                            }
                          },
                          "id": 5646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164726:193:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164701:218:0"
                      },
                      {
                        "assignments": [
                          5649
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5649,
                            "mutability": "mutable",
                            "name": "maxSwapOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "165027:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5648,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "165027:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5659,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5657,
                              "name": "WAD",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4799,
                              "src": "165095:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 5652,
                                      "name": "bPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5599,
                                      "src": "165068:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IBPool_$4312",
                                        "typeString": "contract IBPool"
                                      }
                                    },
                                    "id": 5653,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "MAX_OUT_RATIO",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4175,
                                    "src": "165068:19:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view external returns (uint256)"
                                    }
                                  },
                                  "id": 5654,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "165068:21:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5650,
                                  "name": "tokenBalanceOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5605,
                                  "src": "165048:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5651,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "165048:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5655,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "165048:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 808,
                            "src": "165048:46:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "165048:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "165027:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5662,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5660,
                              "name": "tokenAmountOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5637,
                              "src": "165117:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 5661,
                              "name": "maxSwapOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5649,
                              "src": "165135:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "165117:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 5664,
                            "name": "maxSwapOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5649,
                            "src": "165165:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "165117:58:0",
                          "trueExpression": {
                            "argumentTypes": null,
                            "id": 5663,
                            "name": "tokenAmountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5637,
                            "src": "165148:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5597,
                        "id": 5666,
                        "nodeType": "Return",
                        "src": "165110:65:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 5668,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getSwapOutValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5594,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5589,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5668,
                        "src": "164063:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5588,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "164063:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5591,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5668,
                        "src": "164087:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5590,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "164087:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5593,
                        "mutability": "mutable",
                        "name": "poolAmountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5668,
                        "src": "164119:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5592,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "164119:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "164053:92:0"
                  },
                  "returnParameters": {
                    "id": 5597,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5596,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5668,
                        "src": "164169:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5595,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "164169:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "164168:9:0"
                  },
                  "scope": 5865,
                  "src": "164028:1154:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5745,
                    "nodeType": "Block",
                    "src": "166447:880:0",
                    "statements": [
                      {
                        "assignments": [
                          5687
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5687,
                            "mutability": "mutable",
                            "name": "bPool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166507:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBPool_$4312",
                              "typeString": "contract IBPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 5686,
                              "name": "IBPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4312,
                              "src": "166507:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5691,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5689,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5671,
                              "src": "166529:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5688,
                            "name": "IBPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "166522:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                              "typeString": "type(contract IBPool)"
                            }
                          },
                          "id": 5690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166522:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBPool_$4312",
                            "typeString": "contract IBPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166507:29:0"
                      },
                      {
                        "assignments": [
                          5693
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5693,
                            "mutability": "mutable",
                            "name": "tokenBalanceOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166547:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5692,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "166547:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5698,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5696,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5673,
                              "src": "166590:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5694,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5687,
                              "src": "166573:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getBalance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4223,
                            "src": "166573:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5697,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166573:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166547:58:0"
                      },
                      {
                        "assignments": [
                          5700
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5700,
                            "mutability": "mutable",
                            "name": "tokenWeightOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166615:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5699,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "166615:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5705,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5703,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5673,
                              "src": "166669:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5701,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5687,
                              "src": "166641:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getDenormalizedWeight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4237,
                            "src": "166641:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5704,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166641:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166615:69:0"
                      },
                      {
                        "assignments": [
                          5707
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5707,
                            "mutability": "mutable",
                            "name": "poolSupply",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166694:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5706,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "166694:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5711,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5708,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5687,
                              "src": "166720:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5709,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "totalSupply",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4252,
                            "src": "166720:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166720:19:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166694:45:0"
                      },
                      {
                        "assignments": [
                          5713
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5713,
                            "mutability": "mutable",
                            "name": "totalWeight",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166749:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5712,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "166749:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5717,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5714,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5687,
                              "src": "166775:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5715,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getTotalDenormalizedWeight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4242,
                            "src": "166775:32:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166775:34:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166749:60:0"
                      },
                      {
                        "assignments": [
                          5719
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5719,
                            "mutability": "mutable",
                            "name": "swapFee",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166819:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5718,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "166819:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5723,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5720,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5687,
                              "src": "166845:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5721,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getSwapFee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4247,
                            "src": "166845:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166845:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166819:44:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5734,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5724,
                            "name": "poolAmountInRequired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5682,
                            "src": "166967:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5727,
                                "name": "tokenBalanceOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5693,
                                "src": "167034:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5728,
                                "name": "tokenWeightOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5700,
                                "src": "167063:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5729,
                                "name": "poolSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5707,
                                "src": "167091:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5730,
                                "name": "totalWeight",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5713,
                                "src": "167115:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5731,
                                "name": "liquidityAssetAmountRequired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5679,
                                "src": "167140:28:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5732,
                                "name": "swapFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5719,
                                "src": "167182:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5725,
                                "name": "bPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5687,
                                "src": "166990:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IBPool_$4312",
                                  "typeString": "contract IBPool"
                                }
                              },
                              "id": 5726,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "calcPoolInGivenSingleOut",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4300,
                              "src": "166990:30:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure external returns (uint256)"
                              }
                            },
                            "id": 5733,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "166990:209:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "166967:232:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5735,
                        "nodeType": "ExpressionStatement",
                        "src": "166967:232:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5736,
                            "name": "stakerBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5684,
                            "src": "167267:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5741,
                                "name": "staker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5675,
                                "src": "167313:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5738,
                                    "name": "stakeLocker",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5677,
                                    "src": "167290:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 5737,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 77,
                                  "src": "167283:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 5739,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "167283:19:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$77",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 5740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16,
                              "src": "167283:29:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 5742,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "167283:37:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "167267:53:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5744,
                        "nodeType": "ExpressionStatement",
                        "src": "167267:53:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5669,
                    "nodeType": "StructuredDocumentation",
                    "src": "165188:988:0",
                    "text": "@dev    Calculates BPTs required if burning BPTs for liquidityAsset, given supplied tokenAmountOutRequired. \n@dev    Vulnerable to flash-loan attacks where the attacker can artificially inflate the BPT price by swapping a large amount \nof liquidityAsset into the pool and swapping back after this function is called.\n@param  _bPool                       The Balancer pool that issues the BPTs.\n@param  liquidityAsset               The swap out asset (e.g. USDC) to receive when burning BPTs.\n@param  staker                       The address that deposited BPTs to stakeLocker.\n@param  stakeLocker                  The contract that escrows BPTs deposited by staker.\n@param  liquidityAssetAmountRequired The amount of liquidityAsset required to recover.\n@return poolAmountInRequired         The required poolAmountIn.\n@return stakerBalance                The poolAmountIn currently staked."
                  },
                  "functionSelector": "c3746825",
                  "id": 5746,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolSharesRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5680,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5671,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166221:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5670,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "166221:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5673,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166245:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5672,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "166245:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5675,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166277:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5674,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "166277:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5677,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166301:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5676,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "166301:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5679,
                        "mutability": "mutable",
                        "name": "liquidityAssetAmountRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166330:36:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5678,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "166330:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "166211:161:0"
                  },
                  "returnParameters": {
                    "id": 5685,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5682,
                        "mutability": "mutable",
                        "name": "poolAmountInRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166394:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5681,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "166394:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5684,
                        "mutability": "mutable",
                        "name": "stakerBalance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166424:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5683,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "166424:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "166393:53:0"
                  },
                  "scope": 5865,
                  "src": "166181:1146:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5807,
                    "nodeType": "Block",
                    "src": "168752:489:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5770,
                            "name": "swapOutAmountRequired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5760,
                            "src": "168762:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5772,
                                "name": "globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5749,
                                "src": "168802:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                  "typeString": "contract IMapleGlobals"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5773,
                                "name": "liquidityAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5753,
                                "src": "168811:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5774,
                                    "name": "globals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5749,
                                    "src": "168827:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  "id": 5775,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "swapOutRequired",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2509,
                                  "src": "168827:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view external returns (uint256)"
                                  }
                                },
                                "id": 5776,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "168827:25:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                  "typeString": "contract IMapleGlobals"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5771,
                              "name": "_convertFromUsd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5864,
                              "src": "168786:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_contract$_IMapleGlobals_$2870_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (contract IMapleGlobals,address,uint256) view returns (uint256)"
                              }
                            },
                            "id": 5777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "168786:67:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "168762:91:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5779,
                        "nodeType": "ExpressionStatement",
                        "src": "168762:91:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 5780,
                                "name": "poolAmountInRequired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5766,
                                "src": "168877:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5781,
                                "name": "poolAmountPresent",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5768,
                                "src": "168911:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 5782,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "168863:75:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5784,
                                "name": "balancerPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5751,
                                "src": "168963:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5785,
                                "name": "liquidityAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5753,
                                "src": "168977:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5786,
                                "name": "poolDelegate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5755,
                                "src": "168993:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5787,
                                "name": "stakeLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5757,
                                "src": "169007:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5788,
                                "name": "swapOutAmountRequired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5760,
                                "src": "169020:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5783,
                              "name": "getPoolSharesRequired",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5746,
                              "src": "168941:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                "typeString": "function (address,address,address,address,uint256) view returns (uint256,uint256)"
                              }
                            },
                            "id": 5789,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "168941:101:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "src": "168863:179:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5791,
                        "nodeType": "ExpressionStatement",
                        "src": "168863:179:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5792,
                            "name": "currentPoolDelegateCover",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5762,
                            "src": "169053:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5794,
                                "name": "balancerPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5751,
                                "src": "169098:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5795,
                                "name": "liquidityAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5753,
                                "src": "169112:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5796,
                                "name": "poolDelegate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5755,
                                "src": "169128:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5797,
                                "name": "stakeLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5757,
                                "src": "169142:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 5793,
                              "name": "getSwapOutValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5563,
                              "src": "169082:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address,address,address,address) view returns (uint256)"
                              }
                            },
                            "id": 5798,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "169082:72:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "169053:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5800,
                        "nodeType": "ExpressionStatement",
                        "src": "169053:101:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5801,
                            "name": "enoughStakeForFinalization",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5764,
                            "src": "169164:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5804,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5802,
                              "name": "poolAmountPresent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5768,
                              "src": "169193:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 5803,
                              "name": "poolAmountInRequired",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5766,
                              "src": "169214:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "169193:41:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "169164:70:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5806,
                        "nodeType": "ExpressionStatement",
                        "src": "169164:70:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5747,
                    "nodeType": "StructuredDocumentation",
                    "src": "167333:1038:0",
                    "text": "@dev    Returns information on the stake requirements.\n@param  globals                    The instance of a MapleGlobals.\n@param  balancerPool               The address of Balancer pool.\n@param  liquidityAsset             The address of Liquidity Asset, to be returned from swap out.\n@param  poolDelegate               The address of Pool Delegate.\n@param  stakeLocker                The address of StakeLocker.\n@return swapOutAmountRequired      The minimum amount of Liquidity Asset coverage from staking required (in Liquidity Asset units).\n@return currentPoolDelegateCover   The present amount of Liquidity Asset coverage from Pool Delegate stake (in Liquidity Asset units).\n@return enoughStakeForFinalization Whether enough stake is present from Pool Delegate for Pool finalization.\n@return poolAmountInRequired       The BPTs required for minimum Liquidity Asset coverage.\n@return poolAmountPresent          The current staked BPTs."
                  },
                  "functionSelector": "767f5038",
                  "id": 5808,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getInitialStakeRequirements",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5758,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5749,
                        "mutability": "mutable",
                        "name": "globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168413:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 5748,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "168413:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5751,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168436:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5750,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "168436:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5753,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168458:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5752,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "168458:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5755,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168482:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5754,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "168482:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5757,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168504:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5756,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "168504:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "168412:112:0"
                  },
                  "returnParameters": {
                    "id": 5769,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5760,
                        "mutability": "mutable",
                        "name": "swapOutAmountRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168557:29:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5759,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "168557:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5762,
                        "mutability": "mutable",
                        "name": "currentPoolDelegateCover",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168596:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5761,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "168596:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5764,
                        "mutability": "mutable",
                        "name": "enoughStakeForFinalization",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168638:34:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5763,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "168638:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5766,
                        "mutability": "mutable",
                        "name": "poolAmountInRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168682:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5765,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "168682:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5768,
                        "mutability": "mutable",
                        "name": "poolAmountPresent",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168720:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5767,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "168720:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "168547:204:0"
                  },
                  "scope": 5865,
                  "src": "168376:865:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5828,
                    "nodeType": "Block",
                    "src": "169652:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5825,
                              "name": "WAD",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4799,
                              "src": "169711:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5822,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3130",
                                    "id": 5820,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "169677:2:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "10"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "**",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5821,
                                    "name": "liquidityAssetDecimals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5813,
                                    "src": "169683:22:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "169677:28:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5818,
                                  "name": "amt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5811,
                                  "src": "169669:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5819,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "169669:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "169669:37:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 808,
                            "src": "169669:41:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5826,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "169669:46:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5817,
                        "id": 5827,
                        "nodeType": "Return",
                        "src": "169662:53:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5809,
                    "nodeType": "StructuredDocumentation",
                    "src": "169341:212:0",
                    "text": "@dev   Converts from WAD precision to Liquidity Asset precision.\n@param amt                    The amount to convert.\n@param liquidityAssetDecimals The Liquidity Asset decimal."
                  },
                  "functionSelector": "bf36f0e9",
                  "id": 5829,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fromWad",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5814,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5811,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5829,
                        "src": "169575:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5810,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "169575:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5813,
                        "mutability": "mutable",
                        "name": "liquidityAssetDecimals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5829,
                        "src": "169588:30:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5812,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "169588:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "169574:45:0"
                  },
                  "returnParameters": {
                    "id": 5817,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5816,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5829,
                        "src": "169643:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5815,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "169643:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "169642:9:0"
                  },
                  "scope": 5865,
                  "src": "169558:164:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5863,
                    "nodeType": "Block",
                    "src": "170278:352:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5859,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5834,
                                  "src": "170562:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5857,
                                  "name": "globals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5832,
                                  "src": "170539:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                    "typeString": "contract IMapleGlobals"
                                  }
                                },
                                "id": 5858,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getLatestPrice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2839,
                                "src": "170539:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 5860,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "170539:38:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5854,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3130",
                                    "id": 5848,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "170432:2:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "10"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "**",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5850,
                                            "name": "liquidityAsset",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5834,
                                            "src": "170452:14:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 5849,
                                          "name": "IERC20Details",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4330,
                                          "src": "170438:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_IERC20Details_$4330_$",
                                            "typeString": "type(contract IERC20Details)"
                                          }
                                        },
                                        "id": 5851,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "170438:29:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IERC20Details_$4330",
                                          "typeString": "contract IERC20Details"
                                        }
                                      },
                                      "id": 5852,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "decimals",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4329,
                                      "src": "170438:38:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                        "typeString": "function () view external returns (uint256)"
                                      }
                                    },
                                    "id": 5853,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "170438:40:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "170432:46:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      },
                                      "id": 5845,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "3130",
                                        "id": 5843,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "170322:2:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "38",
                                        "id": 5844,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "170328:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_8_by_1",
                                          "typeString": "int_const 8"
                                        },
                                        "value": "8"
                                      },
                                      "src": "170322:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 5841,
                                      "name": "usdAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5836,
                                      "src": "170295:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 5842,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 791,
                                    "src": "170295:26:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5846,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "170295:35:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5847,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "170295:136:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5855,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "170295:184:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5856,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 808,
                            "src": "170295:243:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "170295:283:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5840,
                        "id": 5862,
                        "nodeType": "Return",
                        "src": "170288:290:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5830,
                    "nodeType": "StructuredDocumentation",
                    "src": "169728:422:0",
                    "text": "@dev    Returns Liquidity Asset in Liquidity Asset units when given integer USD (E.g., $100 = 100).\n@param  globals        The instance of a MapleGlobals.\n@param  liquidityAsset The Liquidity Asset of the pool.\n@param  usdAmount      The USD amount to convert, in integer units (e.g., $100 = 100).\n@return The usdAmount worth of Liquidity Asset, in Liquidity Asset units."
                  },
                  "id": 5864,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_convertFromUsd",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5837,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5832,
                        "mutability": "mutable",
                        "name": "globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5864,
                        "src": "170180:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 5831,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "170180:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5834,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5864,
                        "src": "170203:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5833,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "170203:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5836,
                        "mutability": "mutable",
                        "name": "usdAmount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5864,
                        "src": "170227:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5835,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "170227:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "170179:66:0"
                  },
                  "returnParameters": {
                    "id": 5840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5839,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5864,
                        "src": "170269:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5838,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "170269:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "170268:9:0"
                  },
                  "scope": 5865,
                  "src": "170155:475:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7393,
              "src": "148331:22302:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 5867,
                    "name": "IPool",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3697,
                    "src": "172010:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPool_$3697",
                      "typeString": "contract IPool"
                    }
                  },
                  "id": 5868,
                  "nodeType": "InheritanceSpecifier",
                  "src": "172010:5:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 5869,
                    "name": "PoolFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3230,
                    "src": "172017:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PoolFDT_$3230",
                      "typeString": "contract PoolFDT"
                    }
                  },
                  "id": 5870,
                  "nodeType": "InheritanceSpecifier",
                  "src": "172017:7:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1076,
                1574,
                1946,
                2006,
                2379,
                3120,
                3230,
                3697
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 5866,
                "nodeType": "StructuredDocumentation",
                "src": "171916:77:0",
                "text": "@title Pool maintains all accounting and functionality related to Pools."
              },
              "fullyImplemented": true,
              "id": 7392,
              "linearizedBaseContracts": [
                7392,
                3230,
                2379,
                1946,
                1574,
                3697,
                3120,
                2006,
                141,
                77,
                1076
              ],
              "name": "Pool",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 5873,
                  "libraryName": {
                    "contractScope": null,
                    "id": 5871,
                    "name": "SafeERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4780,
                    "src": "172038:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeERC20_$4780",
                      "typeString": "library SafeERC20"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "172032:27:0",
                  "typeName": {
                    "contractScope": null,
                    "id": 5872,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "172052:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "constant": true,
                  "id": 5878,
                  "mutability": "constant",
                  "name": "WAD",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7392,
                  "src": "172065:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5874,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172065:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000"
                    },
                    "id": 5877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "3130",
                      "id": 5875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "172088:2:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3138",
                      "id": 5876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "172094:2:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_18_by_1",
                        "typeString": "int_const 18"
                      },
                      "value": "18"
                    },
                    "src": "172088:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3371
                  ],
                  "constant": true,
                  "functionSelector": "174a5be4",
                  "id": 5882,
                  "mutability": "constant",
                  "name": "DL_FACTORY",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5880,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172116:8:0"
                  },
                  "scope": 7392,
                  "src": "172103:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 5879,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "172103:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 5881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "172147:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3377
                  ],
                  "constant": false,
                  "functionSelector": "209b2bca",
                  "id": 5885,
                  "mutability": "immutable",
                  "name": "liquidityAsset",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5884,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172169:8:0"
                  },
                  "scope": 7392,
                  "src": "172155:47:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$77",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5883,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "172155:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3383
                  ],
                  "constant": false,
                  "functionSelector": "4046af2b",
                  "id": 5888,
                  "mutability": "immutable",
                  "name": "poolDelegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5887,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172224:8:0"
                  },
                  "scope": 7392,
                  "src": "172209:46:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5886,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172209:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3389
                  ],
                  "constant": false,
                  "functionSelector": "9759164a",
                  "id": 5891,
                  "mutability": "immutable",
                  "name": "liquidityLocker",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5890,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172276:8:0"
                  },
                  "scope": 7392,
                  "src": "172261:49:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5889,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172261:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3395
                  ],
                  "constant": false,
                  "functionSelector": "80cd916d",
                  "id": 5894,
                  "mutability": "immutable",
                  "name": "stakeAsset",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5893,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172331:8:0"
                  },
                  "scope": 7392,
                  "src": "172316:44:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5892,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172316:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3401
                  ],
                  "constant": false,
                  "functionSelector": "033b1cf0",
                  "id": 5897,
                  "mutability": "immutable",
                  "name": "stakeLocker",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5896,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172381:8:0"
                  },
                  "scope": 7392,
                  "src": "172366:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5895,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172366:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3407
                  ],
                  "constant": false,
                  "functionSelector": "0d49b38c",
                  "id": 5900,
                  "mutability": "immutable",
                  "name": "superFactory",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5899,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172432:8:0"
                  },
                  "scope": 7392,
                  "src": "172417:46:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5898,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172417:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "id": 5902,
                  "mutability": "immutable",
                  "name": "liquidityAssetDecimals",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7392,
                  "src": "172470:48:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5901,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172470:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    3413
                  ],
                  "constant": false,
                  "functionSelector": "eff98843",
                  "id": 5905,
                  "mutability": "mutable",
                  "name": "stakingFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5904,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172603:8:0"
                  },
                  "scope": 7392,
                  "src": "172588:44:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5903,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172588:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3419
                  ],
                  "constant": false,
                  "functionSelector": "b69410de",
                  "id": 5908,
                  "mutability": "immutable",
                  "name": "delegateFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5907,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172653:8:0"
                  },
                  "scope": 7392,
                  "src": "172638:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5906,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172638:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3425
                  ],
                  "constant": false,
                  "functionSelector": "ac641655",
                  "id": 5911,
                  "mutability": "mutable",
                  "name": "principalOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5910,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172705:8:0"
                  },
                  "scope": 7392,
                  "src": "172690:36:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5909,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172690:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3431
                  ],
                  "constant": false,
                  "functionSelector": "76687d3d",
                  "id": 5914,
                  "mutability": "mutable",
                  "name": "liquidityCap",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5913,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172747:8:0"
                  },
                  "scope": 7392,
                  "src": "172732:36:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5912,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172732:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3437
                  ],
                  "constant": false,
                  "functionSelector": "ee947a7c",
                  "id": 5917,
                  "mutability": "mutable",
                  "name": "lockupPeriod",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5916,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172789:8:0"
                  },
                  "scope": 7392,
                  "src": "172774:36:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5915,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172774:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3443
                  ],
                  "constant": false,
                  "functionSelector": "1831ccf2",
                  "id": 5920,
                  "mutability": "mutable",
                  "name": "openToPublic",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5919,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172829:8:0"
                  },
                  "scope": 7392,
                  "src": "172817:33:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5918,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "172817:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3449
                  ],
                  "constant": false,
                  "functionSelector": "641ad8a9",
                  "id": 5923,
                  "mutability": "mutable",
                  "name": "poolState",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5922,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172870:8:0"
                  },
                  "scope": 7392,
                  "src": "172857:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_State_$3237",
                    "typeString": "enum IPool.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5921,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3237,
                    "src": "172857:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_State_$3237",
                      "typeString": "enum IPool.State"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3457
                  ],
                  "constant": false,
                  "functionSelector": "24b92e8e",
                  "id": 5928,
                  "mutability": "mutable",
                  "name": "depositDate",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5927,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172950:8:0"
                  },
                  "scope": 7392,
                  "src": "172895:75:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5926,
                    "keyType": {
                      "id": 5924,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "172903:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "172895:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5925,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "172914:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3467
                  ],
                  "constant": false,
                  "functionSelector": "d7bd3c91",
                  "id": 5935,
                  "mutability": "mutable",
                  "name": "debtLockers",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5934,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173031:8:0"
                  },
                  "scope": 7392,
                  "src": "172976:75:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                    "typeString": "mapping(address => mapping(address => address))"
                  },
                  "typeName": {
                    "id": 5933,
                    "keyType": {
                      "id": 5929,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "172984:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "172976:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                      "typeString": "mapping(address => mapping(address => address))"
                    },
                    "valueType": {
                      "id": 5932,
                      "keyType": {
                        "id": 5930,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "173003:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "172995:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      },
                      "valueType": {
                        "id": 5931,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "173014:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3475
                  ],
                  "constant": false,
                  "functionSelector": "613384f2",
                  "id": 5940,
                  "mutability": "mutable",
                  "name": "poolAdmins",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5939,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173112:8:0"
                  },
                  "scope": 7392,
                  "src": "173057:74:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 5938,
                    "keyType": {
                      "id": 5936,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "173065:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "173057:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 5937,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "173076:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3483
                  ],
                  "constant": false,
                  "functionSelector": "c59e3959",
                  "id": 5945,
                  "mutability": "mutable",
                  "name": "allowedLiquidityProviders",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5944,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173192:8:0"
                  },
                  "scope": 7392,
                  "src": "173137:89:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 5943,
                    "keyType": {
                      "id": 5941,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "173145:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "173137:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 5942,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "173156:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3491
                  ],
                  "constant": false,
                  "functionSelector": "d82745c8",
                  "id": 5950,
                  "mutability": "mutable",
                  "name": "withdrawCooldown",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5949,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173287:8:0"
                  },
                  "scope": 7392,
                  "src": "173232:80:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5948,
                    "keyType": {
                      "id": 5946,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "173240:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "173232:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5947,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "173251:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3501
                  ],
                  "constant": false,
                  "functionSelector": "c965b548",
                  "id": 5957,
                  "mutability": "mutable",
                  "name": "custodyAllowance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5956,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173373:8:0"
                  },
                  "scope": 7392,
                  "src": "173318:80:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 5955,
                    "keyType": {
                      "id": 5951,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "173326:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "173318:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 5954,
                      "keyType": {
                        "id": 5952,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "173345:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "173337:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 5953,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "173356:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3509
                  ],
                  "constant": false,
                  "functionSelector": "af6d5571",
                  "id": 5962,
                  "mutability": "mutable",
                  "name": "totalCustodyAllowance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5961,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173459:8:0"
                  },
                  "scope": 7392,
                  "src": "173404:85:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5960,
                    "keyType": {
                      "id": 5958,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "173412:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "173404:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5959,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "173423:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 6076,
                    "nodeType": "Block",
                    "src": "174965:975:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5994,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "175063:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 5995,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "175063:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 5993,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "175054:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 5996,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "175054:20:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5997,
                              "name": "_liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5967,
                              "src": "175076:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5998,
                              "name": "_stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5969,
                              "src": "175093:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5999,
                              "name": "_stakingFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5975,
                              "src": "175106:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6000,
                              "name": "_delegateFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5977,
                              "src": "175119:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5990,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "175029:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 5992,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "poolSanityChecks",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4882,
                            "src": "175029:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_contract$_IMapleGlobals_$2870_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (contract IMapleGlobals,address,address,uint256,uint256) view"
                            }
                          },
                          "id": 6001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "175029:103:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6002,
                        "nodeType": "ExpressionStatement",
                        "src": "175029:103:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6003,
                            "name": "liquidityAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5885,
                            "src": "175204:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$77",
                              "typeString": "contract IERC20"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6005,
                                "name": "_liquidityAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5967,
                                "src": "175236:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6004,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 77,
                              "src": "175229:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 6006,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "175229:23:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$77",
                              "typeString": "contract IERC20"
                            }
                          },
                          "src": "175204:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "id": 6008,
                        "nodeType": "ExpressionStatement",
                        "src": "175204:48:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6009,
                            "name": "liquidityAssetDecimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5902,
                            "src": "175262:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6011,
                                    "name": "_liquidityAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5967,
                                    "src": "175293:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 6010,
                                  "name": "ERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1574,
                                  "src": "175287:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ERC20_$1574_$",
                                    "typeString": "type(contract ERC20)"
                                  }
                                },
                                "id": 6012,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "175287:22:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$1574",
                                  "typeString": "contract ERC20"
                                }
                              },
                              "id": 6013,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1150,
                              "src": "175287:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                "typeString": "function () view external returns (uint8)"
                              }
                            },
                            "id": 6014,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "175287:33:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "175262:58:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6016,
                        "nodeType": "ExpressionStatement",
                        "src": "175262:58:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6017,
                            "name": "stakeAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5894,
                            "src": "175366:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6018,
                            "name": "_stakeAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5969,
                            "src": "175381:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "175366:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6020,
                        "nodeType": "ExpressionStatement",
                        "src": "175366:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6021,
                            "name": "poolDelegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5888,
                            "src": "175402:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6022,
                            "name": "_poolDelegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5965,
                            "src": "175417:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "175402:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6024,
                        "nodeType": "ExpressionStatement",
                        "src": "175402:28:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6025,
                            "name": "stakingFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5905,
                            "src": "175440:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6026,
                            "name": "_stakingFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5975,
                            "src": "175455:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "175440:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6028,
                        "nodeType": "ExpressionStatement",
                        "src": "175440:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6029,
                            "name": "delegateFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5908,
                            "src": "175476:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6030,
                            "name": "_delegateFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5977,
                            "src": "175491:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "175476:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6032,
                        "nodeType": "ExpressionStatement",
                        "src": "175476:27:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6033,
                            "name": "superFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5900,
                            "src": "175513:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6034,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "175528:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 6035,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "175528:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "175513:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6037,
                        "nodeType": "ExpressionStatement",
                        "src": "175513:25:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6040,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6038,
                            "name": "liquidityCap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5914,
                            "src": "175548:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6039,
                            "name": "_liquidityCap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5979,
                            "src": "175563:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "175548:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6041,
                        "nodeType": "ExpressionStatement",
                        "src": "175548:28:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6042,
                            "name": "stakeLocker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5897,
                            "src": "175651:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6049,
                                    "name": "_stakeAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5969,
                                    "src": "175719:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6050,
                                    "name": "_liquidityAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5967,
                                    "src": "175732:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6046,
                                        "name": "_slFactory",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5971,
                                        "src": "175697:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 6045,
                                      "name": "IStakeLockerFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4156,
                                      "src": "175677:19:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IStakeLockerFactory_$4156_$",
                                        "typeString": "type(contract IStakeLockerFactory)"
                                      }
                                    },
                                    "id": 6047,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "175677:31:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IStakeLockerFactory_$4156",
                                      "typeString": "contract IStakeLockerFactory"
                                    }
                                  },
                                  "id": 6048,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "newLocker",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4155,
                                  "src": "175677:41:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$_t_address_$",
                                    "typeString": "function (address,address) external returns (address)"
                                  }
                                },
                                "id": 6051,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "175677:71:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6044,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "175669:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 6043,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "175669:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6052,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "175669:80:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "175651:98:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6054,
                        "nodeType": "ExpressionStatement",
                        "src": "175651:98:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6055,
                            "name": "liquidityLocker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5891,
                            "src": "175759:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6062,
                                    "name": "_liquidityAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5967,
                                    "src": "175831:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6059,
                                        "name": "_llFactory",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5973,
                                        "src": "175809:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 6058,
                                      "name": "ILiquidityLockerFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2946,
                                      "src": "175785:23:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ILiquidityLockerFactory_$2946_$",
                                        "typeString": "type(contract ILiquidityLockerFactory)"
                                      }
                                    },
                                    "id": 6060,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "175785:35:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ILiquidityLockerFactory_$2946",
                                      "typeString": "contract ILiquidityLockerFactory"
                                    }
                                  },
                                  "id": 6061,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "newLocker",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2945,
                                  "src": "175785:45:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_address_$",
                                    "typeString": "function (address) external returns (address)"
                                  }
                                },
                                "id": 6063,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "175785:62:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6057,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "175777:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 6056,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "175777:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6064,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "175777:71:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "175759:89:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6066,
                        "nodeType": "ExpressionStatement",
                        "src": "175759:89:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6069,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6067,
                            "name": "lockupPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5917,
                            "src": "175859:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "313830",
                            "id": 6068,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "175874:8:0",
                            "subdenomination": "days",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_15552000_by_1",
                              "typeString": "int_const 15552000"
                            },
                            "value": "180"
                          },
                          "src": "175859:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6070,
                        "nodeType": "ExpressionStatement",
                        "src": "175859:23:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6072,
                                "name": "State",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "175915:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                  "typeString": "type(enum IPool.State)"
                                }
                              },
                              "id": 6073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Initialized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "175915:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6071,
                            "name": "PoolStateChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3319,
                            "src": "175898:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State)"
                            }
                          },
                          "id": 6074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "175898:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6075,
                        "nodeType": "EmitStatement",
                        "src": "175893:40:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5963,
                    "nodeType": "StructuredDocumentation",
                    "src": "173753:863:0",
                    "text": "@dev   Constructor for a Pool. \n@dev   It emits a `PoolStateChanged` event. \n@param _poolDelegate   Address that has manager privileges of the Pool.\n@param _liquidityAsset Asset used to fund the Pool, It gets escrowed in LiquidityLocker.\n@param _stakeAsset     Asset escrowed in StakeLocker.\n@param _slFactory      Factory used to instantiate the StakeLocker.\n@param _llFactory      Factory used to instantiate the LiquidityLocker.\n@param _stakingFee     Fee that Stakers earn on interest, in basis points.\n@param _delegateFee    Fee that the Pool Delegate earns on interest, in basis points.\n@param _liquidityCap   Max amount of Liquidity Asset accepted by the Pool.\n@param name            Name of Pool token.\n@param symbol          Symbol of Pool token."
                  },
                  "id": 6077,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5986,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5981,
                          "src": "174944:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 5987,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5983,
                          "src": "174950:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 5988,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 5985,
                        "name": "PoolFDT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3230,
                        "src": "174936:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PoolFDT_$3230_$",
                          "typeString": "type(contract PoolFDT)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "174936:21:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5984,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5965,
                        "mutability": "mutable",
                        "name": "_poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174642:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5964,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "174642:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5967,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174673:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5966,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "174673:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5969,
                        "mutability": "mutable",
                        "name": "_stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174706:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5968,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "174706:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5971,
                        "mutability": "mutable",
                        "name": "_slFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174735:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5970,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "174735:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5973,
                        "mutability": "mutable",
                        "name": "_llFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174763:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5972,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "174763:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5975,
                        "mutability": "mutable",
                        "name": "_stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174791:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5974,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "174791:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5977,
                        "mutability": "mutable",
                        "name": "_delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174820:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5976,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "174820:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5979,
                        "mutability": "mutable",
                        "name": "_liquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174850:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5978,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "174850:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5981,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174881:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5980,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "174881:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5983,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174909:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5982,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "174909:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "174632:303:0"
                  },
                  "returnParameters": {
                    "id": 5989,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "174965:0:0"
                  },
                  "scope": 7392,
                  "src": "174621:1319:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3513
                  ],
                  "body": {
                    "id": 6108,
                    "nodeType": "Block",
                    "src": "176099:296:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6081,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "176109:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176109:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6083,
                        "nodeType": "ExpressionStatement",
                        "src": "176109:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6085,
                                "name": "State",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "176171:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                  "typeString": "type(enum IPool.State)"
                                }
                              },
                              "id": 6086,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Initialized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "176171:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6084,
                            "name": "_isValidState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7270,
                            "src": "176157:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State) view"
                            }
                          },
                          "id": 6087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176157:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6088,
                        "nodeType": "ExpressionStatement",
                        "src": "176157:32:0"
                      },
                      {
                        "assignments": [
                          null,
                          null,
                          6090,
                          null,
                          null
                        ],
                        "declarations": [
                          null,
                          null,
                          {
                            "constant": false,
                            "id": 6090,
                            "mutability": "mutable",
                            "name": "stakeSufficient",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6108,
                            "src": "176203:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6089,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "176203:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null,
                          null
                        ],
                        "id": 6093,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6091,
                            "name": "getInitialStakeRequirements",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7185,
                            "src": "176229:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$",
                              "typeString": "function () view returns (uint256,uint256,bool,uint256,uint256)"
                            }
                          },
                          "id": 6092,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176229:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,bool,uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "176199:59:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6095,
                              "name": "stakeSufficient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6090,
                              "src": "176276:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e5355465f5354414b45",
                              "id": 6096,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "176293:15:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_15e893024b29d889dfd88f4b5984f981da3d8e8590a7f372d8b9985da40a39ac",
                                "typeString": "literal_string \"P:INSUF_STAKE\""
                              },
                              "value": "P:INSUF_STAKE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_15e893024b29d889dfd88f4b5984f981da3d8e8590a7f372d8b9985da40a39ac",
                                "typeString": "literal_string \"P:INSUF_STAKE\""
                              }
                            ],
                            "id": 6094,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "176268:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176268:41:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6098,
                        "nodeType": "ExpressionStatement",
                        "src": "176268:41:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6099,
                            "name": "poolState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5923,
                            "src": "176319:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6100,
                              "name": "State",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3237,
                              "src": "176331:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                "typeString": "type(enum IPool.State)"
                              }
                            },
                            "id": 6101,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Finalized",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "176331:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "src": "176319:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "id": 6103,
                        "nodeType": "ExpressionStatement",
                        "src": "176319:27:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6105,
                              "name": "poolState",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5923,
                              "src": "176378:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6104,
                            "name": "PoolStateChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3319,
                            "src": "176361:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State)"
                            }
                          },
                          "id": 6106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176361:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6107,
                        "nodeType": "EmitStatement",
                        "src": "176356:32:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "4bb278f3",
                  "id": 6109,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "finalize",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6079,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "176090:8:0"
                  },
                  "parameters": {
                    "id": 6078,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "176078:2:0"
                  },
                  "returnParameters": {
                    "id": 6080,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "176099:0:0"
                  },
                  "scope": 7392,
                  "src": "176061:334:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3523
                  ],
                  "body": {
                    "id": 6148,
                    "nodeType": "Block",
                    "src": "176483:269:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6119,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "176493:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176493:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6121,
                        "nodeType": "ExpressionStatement",
                        "src": "176493:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6123,
                                "name": "State",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "176555:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                  "typeString": "type(enum IPool.State)"
                                }
                              },
                              "id": 6124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Finalized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "176555:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6122,
                            "name": "_isValidState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7270,
                            "src": "176541:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State) view"
                            }
                          },
                          "id": 6125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176541:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6126,
                        "nodeType": "ExpressionStatement",
                        "src": "176541:30:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6127,
                            "name": "principalOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5911,
                            "src": "176581:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6130,
                                "name": "amt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6115,
                                "src": "176613:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6128,
                                "name": "principalOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5911,
                                "src": "176596:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "176596:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6131,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "176596:21:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "176581:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6133,
                        "nodeType": "ExpressionStatement",
                        "src": "176581:36:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6137,
                              "name": "debtLockers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5935,
                              "src": "176644:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                "typeString": "mapping(address => mapping(address => address))"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6138,
                              "name": "superFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5900,
                              "src": "176657:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6139,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "176671:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6140,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6111,
                              "src": "176688:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6141,
                              "name": "dlFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6113,
                              "src": "176694:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6142,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6115,
                              "src": "176705:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                "typeString": "mapping(address => mapping(address => address))"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6134,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "176627:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fundLoan",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4997,
                            "src": "176627:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$_$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (mapping(address => mapping(address => address)),address,address,address,address,uint256)"
                            }
                          },
                          "id": 6143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176627:82:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6144,
                        "nodeType": "ExpressionStatement",
                        "src": "176627:82:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6145,
                            "name": "_emitBalanceUpdatedEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "176719:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176719:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6147,
                        "nodeType": "ExpressionStatement",
                        "src": "176719:26:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "1aa37cec",
                  "id": 6149,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6117,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "176474:8:0"
                  },
                  "parameters": {
                    "id": 6116,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6111,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6149,
                        "src": "176419:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176419:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6113,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6149,
                        "src": "176433:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6112,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176433:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6115,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6149,
                        "src": "176452:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6114,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "176452:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "176418:46:0"
                  },
                  "returnParameters": {
                    "id": 6118,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "176483:0:0"
                  },
                  "scope": 7392,
                  "src": "176401:351:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3531
                  ],
                  "body": {
                    "id": 6170,
                    "nodeType": "Block",
                    "src": "176833:123:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6157,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "176843:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176843:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6159,
                        "nodeType": "ExpressionStatement",
                        "src": "176843:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6161,
                                      "name": "debtLockers",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5935,
                                      "src": "176903:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                        "typeString": "mapping(address => mapping(address => address))"
                                      }
                                    },
                                    "id": 6163,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6162,
                                      "name": "loan",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6151,
                                      "src": "176915:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "176903:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                      "typeString": "mapping(address => address)"
                                    }
                                  },
                                  "id": 6165,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 6164,
                                    "name": "dlFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6153,
                                    "src": "176921:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "176903:28:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6160,
                                "name": "IDebtLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 588,
                                "src": "176891:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IDebtLocker_$588_$",
                                  "typeString": "type(contract IDebtLocker)"
                                }
                              },
                              "id": 6166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "176891:41:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IDebtLocker_$588",
                                "typeString": "contract IDebtLocker"
                              }
                            },
                            "id": 6167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "triggerDefault",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 587,
                            "src": "176891:56:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                              "typeString": "function () external"
                            }
                          },
                          "id": 6168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176891:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6169,
                        "nodeType": "ExpressionStatement",
                        "src": "176891:58:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "40504ba0",
                  "id": 6171,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "triggerDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6155,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "176824:8:0"
                  },
                  "parameters": {
                    "id": 6154,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6151,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6171,
                        "src": "176782:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6150,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176782:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6153,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6171,
                        "src": "176796:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6152,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176796:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "176781:33:0"
                  },
                  "returnParameters": {
                    "id": 6156,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "176833:0:0"
                  },
                  "scope": 7392,
                  "src": "176758:198:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3543
                  ],
                  "body": {
                    "id": 6318,
                    "nodeType": "Block",
                    "src": "177066:2628:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6183,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "177076:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "177076:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6185,
                        "nodeType": "ExpressionStatement",
                        "src": "177076:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6186,
                            "name": "_isValidDelegateOrPoolAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7349,
                            "src": "177110:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "177110:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6188,
                        "nodeType": "ExpressionStatement",
                        "src": "177110:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6189,
                            "name": "claimInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6181,
                            "src": "177149:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                              "typeString": "uint256[7] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 6191,
                                        "name": "debtLockers",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5935,
                                        "src": "177173:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                          "typeString": "mapping(address => mapping(address => address))"
                                        }
                                      },
                                      "id": 6193,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 6192,
                                        "name": "loan",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6173,
                                        "src": "177185:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "177173:17:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                        "typeString": "mapping(address => address)"
                                      }
                                    },
                                    "id": 6195,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6194,
                                      "name": "dlFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6175,
                                      "src": "177191:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "177173:28:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 6190,
                                  "name": "IDebtLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 588,
                                  "src": "177161:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IDebtLocker_$588_$",
                                    "typeString": "type(contract IDebtLocker)"
                                  }
                                },
                                "id": 6196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "177161:41:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IDebtLocker_$588",
                                  "typeString": "contract IDebtLocker"
                                }
                              },
                              "id": 6197,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "claim",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 583,
                              "src": "177161:47:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_array$_t_uint256_$7_memory_ptr_$",
                                "typeString": "function () external returns (uint256[7] memory)"
                              }
                            },
                            "id": 6198,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "177161:49:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                              "typeString": "uint256[7] memory"
                            }
                          },
                          "src": "177149:61:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                            "typeString": "uint256[7] memory"
                          }
                        },
                        "id": 6200,
                        "nodeType": "ExpressionStatement",
                        "src": "177149:61:0"
                      },
                      {
                        "assignments": [
                          6202,
                          6204,
                          6206,
                          6208
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6202,
                            "mutability": "mutable",
                            "name": "poolDelegatePortion",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6318,
                            "src": "177222:27:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6201,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "177222:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6204,
                            "mutability": "mutable",
                            "name": "stakeLockerPortion",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6318,
                            "src": "177251:26:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6203,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "177251:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6206,
                            "mutability": "mutable",
                            "name": "principalClaim",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6318,
                            "src": "177279:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6205,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "177279:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6208,
                            "mutability": "mutable",
                            "name": "interestClaim",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6318,
                            "src": "177303:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6207,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "177303:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6215,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6211,
                              "name": "claimInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6181,
                              "src": "177362:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                                "typeString": "uint256[7] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6212,
                              "name": "delegateFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5908,
                              "src": "177373:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6213,
                              "name": "stakingFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5905,
                              "src": "177386:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                                "typeString": "uint256[7] memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6209,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "177328:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6210,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "calculateClaimAndPortions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5213,
                            "src": "177328:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_pure$_t_array$_t_uint256_$7_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                              "typeString": "function (uint256[7] memory,uint256,uint256) pure returns (uint256,uint256,uint256,uint256)"
                            }
                          },
                          "id": 6214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "177328:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "177221:176:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6218,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6216,
                            "name": "principalClaim",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6206,
                            "src": "177615:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6217,
                            "name": "principalOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5911,
                            "src": "177633:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "177615:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6243,
                          "nodeType": "Block",
                          "src": "177722:450:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6233,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6226,
                                  "name": "interestClaim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6208,
                                  "src": "177736:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6231,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6229,
                                        "name": "principalClaim",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6206,
                                        "src": "177771:14:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6230,
                                        "name": "principalOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5911,
                                        "src": "177788:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "177771:29:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6227,
                                      "name": "interestClaim",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6208,
                                      "src": "177753:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6228,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 711,
                                    "src": "177753:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6232,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "177753:48:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "177736:65:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6234,
                              "nodeType": "ExpressionStatement",
                              "src": "177736:65:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6237,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6235,
                                  "name": "principalClaim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6206,
                                  "src": "177876:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 6236,
                                  "name": "principalOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5911,
                                  "src": "177893:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "177876:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6238,
                              "nodeType": "ExpressionStatement",
                              "src": "177876:29:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6241,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6239,
                                  "name": "principalOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5911,
                                  "src": "178034:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 6240,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "178051:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "178034:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6242,
                              "nodeType": "ExpressionStatement",
                              "src": "178034:18:0"
                            }
                          ]
                        },
                        "id": 6244,
                        "nodeType": "IfStatement",
                        "src": "177611:561:0",
                        "trueBody": {
                          "id": 6225,
                          "nodeType": "Block",
                          "src": "177647:69:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6223,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6219,
                                  "name": "principalOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5911,
                                  "src": "177661:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6222,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 6220,
                                    "name": "principalOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5911,
                                    "src": "177676:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 6221,
                                    "name": "principalClaim",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6206,
                                    "src": "177691:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "177676:29:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "177661:44:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6224,
                              "nodeType": "ExpressionStatement",
                              "src": "177661:44:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6250,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6245,
                            "name": "interestSum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3131,
                            "src": "178286:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6248,
                                "name": "interestClaim",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6208,
                                "src": "178316:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6246,
                                "name": "interestSum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3131,
                                "src": "178300:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6247,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "178300:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6249,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "178300:30:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "178286:44:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6251,
                        "nodeType": "ExpressionStatement",
                        "src": "178286:44:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6253,
                              "name": "poolDelegate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5888,
                              "src": "178365:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6254,
                              "name": "poolDelegatePortion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6202,
                              "src": "178379:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6252,
                            "name": "_transferLiquidityAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7331,
                            "src": "178341:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "178341:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6256,
                        "nodeType": "ExpressionStatement",
                        "src": "178341:58:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6258,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5897,
                              "src": "178500:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6259,
                              "name": "stakeLockerPortion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6204,
                              "src": "178514:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6257,
                            "name": "_transferLiquidityAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7331,
                            "src": "178476:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "178476:57:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6261,
                        "nodeType": "ExpressionStatement",
                        "src": "178476:57:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6263,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "179072:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6266,
                                  "name": "interestClaim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6208,
                                  "src": "179108:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6264,
                                  "name": "principalClaim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6206,
                                  "src": "179089:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 6265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 711,
                                "src": "179089:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "179089:33:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6262,
                            "name": "_transferLiquidityAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7331,
                            "src": "179048:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6268,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179048:75:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6269,
                        "nodeType": "ExpressionStatement",
                        "src": "179048:75:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6270,
                              "name": "claimInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6181,
                              "src": "179188:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                                "typeString": "uint256[7] memory"
                              }
                            },
                            "id": 6272,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "36",
                              "id": 6271,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "179198:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_6_by_1",
                                "typeString": "int_const 6"
                              },
                              "value": "6"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "179188:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "179203:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "179188:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6282,
                        "nodeType": "IfStatement",
                        "src": "179184:56:0",
                        "trueBody": {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6276,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6173,
                                "src": "179221:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 6277,
                                  "name": "claimInfo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6181,
                                  "src": "179227:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                                    "typeString": "uint256[7] memory"
                                  }
                                },
                                "id": 6279,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "36",
                                  "id": 6278,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "179237:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_6_by_1",
                                    "typeString": "int_const 6"
                                  },
                                  "value": "6"
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "179227:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 6275,
                              "name": "_handleDefault",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6381,
                              "src": "179206:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                "typeString": "function (address,uint256)"
                              }
                            },
                            "id": 6280,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "179206:34:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6281,
                          "nodeType": "ExpressionStatement",
                          "src": "179206:34:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6284,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5897,
                                  "src": "179318:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6283,
                                "name": "IStakeLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4104,
                                "src": "179305:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IStakeLocker_$4104_$",
                                  "typeString": "type(contract IStakeLocker)"
                                }
                              },
                              "id": 6285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "179305:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeLocker_$4104",
                                "typeString": "contract IStakeLocker"
                              }
                            },
                            "id": 6286,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updateFundsReceived",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 140,
                            "src": "179305:45:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                              "typeString": "function () external"
                            }
                          },
                          "id": 6287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179305:47:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6288,
                        "nodeType": "ExpressionStatement",
                        "src": "179305:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6289,
                            "name": "updateFundsReceived",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1945,
                            "src": "179410:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6290,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179410:21:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6291,
                        "nodeType": "ExpressionStatement",
                        "src": "179410:21:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6292,
                            "name": "_emitBalanceUpdatedEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "179442:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179442:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6294,
                        "nodeType": "ExpressionStatement",
                        "src": "179442:26:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6296,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5897,
                              "src": "179498:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6299,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "179519:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 6298,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "179511:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6297,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "179511:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6300,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "179511:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6303,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5897,
                                  "src": "179561:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6301,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "179536:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 6302,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16,
                                "src": "179536:24:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 6304,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "179536:37:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6295,
                            "name": "BalanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3270,
                            "src": "179483:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 6305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179483:91:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6306,
                        "nodeType": "EmitStatement",
                        "src": "179478:96:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6308,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6173,
                              "src": "179596:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6309,
                              "name": "interestClaim",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6208,
                              "src": "179602:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6310,
                              "name": "principalClaim",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6206,
                              "src": "179617:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6311,
                                "name": "claimInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6181,
                                "src": "179633:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                                  "typeString": "uint256[7] memory"
                                }
                              },
                              "id": 6313,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 6312,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "179643:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "179633:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6314,
                              "name": "stakeLockerPortion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6204,
                              "src": "179647:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6315,
                              "name": "poolDelegatePortion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6202,
                              "src": "179667:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6307,
                            "name": "Claim",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3261,
                            "src": "179590:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256,uint256,uint256,uint256)"
                            }
                          },
                          "id": 6316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179590:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6317,
                        "nodeType": "EmitStatement",
                        "src": "179585:102:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "21c0b342",
                  "id": 6319,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "claim",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6177,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "177019:8:0"
                  },
                  "parameters": {
                    "id": 6176,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6173,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6319,
                        "src": "176977:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6172,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176977:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6175,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6319,
                        "src": "176991:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6174,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176991:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "176976:33:0"
                  },
                  "returnParameters": {
                    "id": 6182,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6181,
                        "mutability": "mutable",
                        "name": "claimInfo",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6319,
                        "src": "177037:27:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                          "typeString": "uint256[7]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 6178,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "177037:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6180,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 6179,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "177045:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "177037:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                            "typeString": "uint256[7]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "177036:29:0"
                  },
                  "scope": 7392,
                  "src": "176962:2732:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 6380,
                    "nodeType": "Block",
                    "src": "180093:1306:0",
                    "statements": [
                      {
                        "assignments": [
                          6328,
                          6330,
                          6332
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6328,
                            "mutability": "mutable",
                            "name": "bptsBurned",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6380,
                            "src": "180105:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6327,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "180105:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6330,
                            "mutability": "mutable",
                            "name": "postBurnBptBal",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6380,
                            "src": "180125:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6329,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "180125:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6332,
                            "mutability": "mutable",
                            "name": "liquidityAssetRecoveredFromBurn",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6380,
                            "src": "180149:39:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6331,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "180149:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6340,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6335,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5885,
                              "src": "180214:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6336,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5897,
                              "src": "180230:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6337,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5894,
                              "src": "180243:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6338,
                              "name": "defaultSuffered",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6324,
                              "src": "180255:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6333,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "180192:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "handleDefault",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5127,
                            "src": "180192:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                              "typeString": "function (contract IERC20,address,address,uint256) returns (uint256,uint256,uint256)"
                            }
                          },
                          "id": 6339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "180192:79:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "180104:167:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6341,
                            "name": "defaultSuffered",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6324,
                            "src": "180405:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6342,
                            "name": "liquidityAssetRecoveredFromBurn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6332,
                            "src": "180423:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "180405:49:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6357,
                        "nodeType": "IfStatement",
                        "src": "180401:194:0",
                        "trueBody": {
                          "id": 6356,
                          "nodeType": "Block",
                          "src": "180456:139:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6351,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6344,
                                  "name": "poolLosses",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3134,
                                  "src": "180470:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6349,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6347,
                                        "name": "defaultSuffered",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6324,
                                        "src": "180498:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6348,
                                        "name": "liquidityAssetRecoveredFromBurn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6332,
                                        "src": "180516:31:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "180498:49:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6345,
                                      "name": "poolLosses",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3134,
                                      "src": "180483:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6346,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 711,
                                    "src": "180483:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6350,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "180483:65:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "180470:78:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6352,
                              "nodeType": "ExpressionStatement",
                              "src": "180470:78:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 6353,
                                  "name": "updateLossesReceived",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2364,
                                  "src": "180562:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                    "typeString": "function ()"
                                  }
                                },
                                "id": 6354,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "180562:22:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6355,
                              "nodeType": "ExpressionStatement",
                              "src": "180562:22:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6361,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "180699:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6362,
                              "name": "liquidityAssetRecoveredFromBurn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6332,
                              "src": "180716:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6358,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5885,
                              "src": "180671:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 6360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4601,
                            "src": "180671:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$77_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 6363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "180671:77:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6364,
                        "nodeType": "ExpressionStatement",
                        "src": "180671:77:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6365,
                            "name": "principalOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5911,
                            "src": "180759:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6368,
                                "name": "defaultSuffered",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6324,
                                "src": "180791:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6366,
                                "name": "principalOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5911,
                                "src": "180774:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6367,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "180774:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6369,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "180774:33:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "180759:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6371,
                        "nodeType": "ExpressionStatement",
                        "src": "180759:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6373,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6322,
                              "src": "180915:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6374,
                              "name": "defaultSuffered",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6324,
                              "src": "180999:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6375,
                              "name": "bptsBurned",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6328,
                              "src": "181115:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6376,
                              "name": "postBurnBptBal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6330,
                              "src": "181203:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6377,
                              "name": "liquidityAssetRecoveredFromBurn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6332,
                              "src": "181292:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6372,
                            "name": "DefaultSuffered",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3365,
                            "src": "180886:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256,uint256,uint256)"
                            }
                          },
                          "id": 6378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "180886:506:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6379,
                        "nodeType": "EmitStatement",
                        "src": "180881:511:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6320,
                    "nodeType": "StructuredDocumentation",
                    "src": "179700:316:0",
                    "text": "@dev   Handles if a claim has been made and there is a non-zero defaultSuffered amount. \n@dev   It emits a `DefaultSuffered` event. \n@param loan            The address of a Loan that has defaulted.\n@param defaultSuffered The losses suffered from default after liquidation."
                  },
                  "id": 6381,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_handleDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 6325,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6322,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6381,
                        "src": "180045:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6321,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "180045:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6324,
                        "mutability": "mutable",
                        "name": "defaultSuffered",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6381,
                        "src": "180059:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6323,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "180059:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "180044:39:0"
                  },
                  "returnParameters": {
                    "id": 6326,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "180093:0:0"
                  },
                  "scope": 7392,
                  "src": "180021:1378:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3547
                  ],
                  "body": {
                    "id": 6415,
                    "nodeType": "Block",
                    "src": "181445:277:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6385,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "181455:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181455:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6387,
                        "nodeType": "ExpressionStatement",
                        "src": "181455:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6389,
                                "name": "State",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "181517:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                  "typeString": "type(enum IPool.State)"
                                }
                              },
                              "id": 6390,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Finalized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "181517:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6388,
                            "name": "_isValidState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7270,
                            "src": "181503:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State) view"
                            }
                          },
                          "id": 6391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181503:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6392,
                        "nodeType": "ExpressionStatement",
                        "src": "181503:30:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6397,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5900,
                                  "src": "181581:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6396,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "181572:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 6398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "181572:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6399,
                              "name": "principalOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5911,
                              "src": "181596:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6402,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "181618:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 6401,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "181610:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6400,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "181610:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6403,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "181610:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6393,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "181543:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "validateDeactivation",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5235,
                            "src": "181543:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_contract$_IMapleGlobals_$2870_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (contract IMapleGlobals,uint256,address) view"
                            }
                          },
                          "id": 6404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181543:91:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6405,
                        "nodeType": "ExpressionStatement",
                        "src": "181543:91:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6406,
                            "name": "poolState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5923,
                            "src": "181644:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6407,
                              "name": "State",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3237,
                              "src": "181656:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                "typeString": "type(enum IPool.State)"
                              }
                            },
                            "id": 6408,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Deactivated",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "181656:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "src": "181644:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "id": 6410,
                        "nodeType": "ExpressionStatement",
                        "src": "181644:29:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6412,
                              "name": "poolState",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5923,
                              "src": "181705:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6411,
                            "name": "PoolStateChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3319,
                            "src": "181688:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State)"
                            }
                          },
                          "id": 6413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181688:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6414,
                        "nodeType": "EmitStatement",
                        "src": "181683:32:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "51b42b00",
                  "id": 6416,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deactivate",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6383,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "181436:8:0"
                  },
                  "parameters": {
                    "id": 6382,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "181424:2:0"
                  },
                  "returnParameters": {
                    "id": 6384,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "181445:0:0"
                  },
                  "scope": 7392,
                  "src": "181405:317:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3553
                  ],
                  "body": {
                    "id": 6436,
                    "nodeType": "Block",
                    "src": "181932:167:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6422,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "181942:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6423,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181942:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6424,
                        "nodeType": "ExpressionStatement",
                        "src": "181942:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6425,
                            "name": "_isValidDelegateOrPoolAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7349,
                            "src": "181976:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181976:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6427,
                        "nodeType": "ExpressionStatement",
                        "src": "181976:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6428,
                            "name": "liquidityCap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5914,
                            "src": "182015:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6429,
                            "name": "newLiquidityCap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6418,
                            "src": "182030:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "182015:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6431,
                        "nodeType": "ExpressionStatement",
                        "src": "182015:30:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6433,
                              "name": "newLiquidityCap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6418,
                              "src": "182076:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6432,
                            "name": "LiquidityCapSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3304,
                            "src": "182060:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 6434,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182060:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6435,
                        "nodeType": "EmitStatement",
                        "src": "182055:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "7b99adb1",
                  "id": 6437,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLiquidityCap",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6420,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "181923:8:0"
                  },
                  "parameters": {
                    "id": 6419,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6418,
                        "mutability": "mutable",
                        "name": "newLiquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6437,
                        "src": "181889:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6417,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "181889:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "181888:25:0"
                  },
                  "returnParameters": {
                    "id": 6421,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "181932:0:0"
                  },
                  "scope": 7392,
                  "src": "181864:235:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3559
                  ],
                  "body": {
                    "id": 6461,
                    "nodeType": "Block",
                    "src": "182173:207:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6443,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "182183:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182183:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6445,
                        "nodeType": "ExpressionStatement",
                        "src": "182183:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6449,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 6447,
                                "name": "newLockupPeriod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6439,
                                "src": "182239:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 6448,
                                "name": "lockupPeriod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5917,
                                "src": "182258:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "182239:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4241445f56414c5545",
                              "id": 6450,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "182272:13:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b95d13420411b48f18d4e0a9f6076e62a4a732d1215cbcd69016fcf03726c75d",
                                "typeString": "literal_string \"P:BAD_VALUE\""
                              },
                              "value": "P:BAD_VALUE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b95d13420411b48f18d4e0a9f6076e62a4a732d1215cbcd69016fcf03726c75d",
                                "typeString": "literal_string \"P:BAD_VALUE\""
                              }
                            ],
                            "id": 6446,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "182231:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182231:55:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6452,
                        "nodeType": "ExpressionStatement",
                        "src": "182231:55:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6453,
                            "name": "lockupPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5917,
                            "src": "182296:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6454,
                            "name": "newLockupPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6439,
                            "src": "182311:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "182296:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6456,
                        "nodeType": "ExpressionStatement",
                        "src": "182296:30:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6458,
                              "name": "newLockupPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6439,
                              "src": "182357:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6457,
                            "name": "LockupPeriodSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3309,
                            "src": "182341:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 6459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182341:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6460,
                        "nodeType": "EmitStatement",
                        "src": "182336:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "c771c390",
                  "id": 6462,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6441,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "182164:8:0"
                  },
                  "parameters": {
                    "id": 6440,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6439,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6462,
                        "src": "182130:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6438,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "182130:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "182129:25:0"
                  },
                  "returnParameters": {
                    "id": 6442,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "182173:0:0"
                  },
                  "scope": 7392,
                  "src": "182105:275:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3565
                  ],
                  "body": {
                    "id": 6489,
                    "nodeType": "Block",
                    "src": "182450:206:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6468,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "182460:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182460:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6470,
                        "nodeType": "ExpressionStatement",
                        "src": "182460:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6477,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6474,
                                    "name": "delegateFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5908,
                                    "src": "182534:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6472,
                                    "name": "newStakingFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6464,
                                    "src": "182516:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6473,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 711,
                                  "src": "182516:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6475,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "182516:30:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31305f303030",
                                "id": 6476,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "182550:6:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                "value": "10_000"
                              },
                              "src": "182516:40:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4241445f464545",
                              "id": 6478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "182558:11:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fd650ed71f4d0a98e5259200e14d6e43239e48299305a76b059f50cbbfa7cc77",
                                "typeString": "literal_string \"P:BAD_FEE\""
                              },
                              "value": "P:BAD_FEE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fd650ed71f4d0a98e5259200e14d6e43239e48299305a76b059f50cbbfa7cc77",
                                "typeString": "literal_string \"P:BAD_FEE\""
                              }
                            ],
                            "id": 6471,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "182508:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182508:62:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6480,
                        "nodeType": "ExpressionStatement",
                        "src": "182508:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6481,
                            "name": "stakingFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5905,
                            "src": "182580:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6482,
                            "name": "newStakingFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6464,
                            "src": "182593:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "182580:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6484,
                        "nodeType": "ExpressionStatement",
                        "src": "182580:26:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6486,
                              "name": "newStakingFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6464,
                              "src": "182635:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6485,
                            "name": "StakingFeeSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3314,
                            "src": "182621:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 6487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182621:28:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6488,
                        "nodeType": "EmitStatement",
                        "src": "182616:33:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "410dbf7e",
                  "id": 6490,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakingFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6466,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "182441:8:0"
                  },
                  "parameters": {
                    "id": 6465,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6464,
                        "mutability": "mutable",
                        "name": "newStakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6490,
                        "src": "182409:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6463,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "182409:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "182408:23:0"
                  },
                  "returnParameters": {
                    "id": 6467,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "182450:0:0"
                  },
                  "scope": 7392,
                  "src": "182386:270:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3573
                  ],
                  "body": {
                    "id": 6512,
                    "nodeType": "Block",
                    "src": "182732:155:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6498,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "182742:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182742:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6500,
                        "nodeType": "ExpressionStatement",
                        "src": "182742:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6501,
                              "name": "allowedLiquidityProviders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5945,
                              "src": "182790:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6503,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 6502,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6492,
                              "src": "182816:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "182790:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6504,
                            "name": "status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6494,
                            "src": "182827:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "182790:43:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6506,
                        "nodeType": "ExpressionStatement",
                        "src": "182790:43:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6508,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6492,
                              "src": "182864:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6509,
                              "name": "status",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6494,
                              "src": "182873:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 6507,
                            "name": "LPStatusChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3299,
                            "src": "182848:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,bool)"
                            }
                          },
                          "id": 6510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182848:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6511,
                        "nodeType": "EmitStatement",
                        "src": "182843:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "7666f125",
                  "id": 6513,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setAllowList",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6496,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "182723:8:0"
                  },
                  "parameters": {
                    "id": 6495,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6492,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6513,
                        "src": "182684:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6491,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "182684:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6494,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6513,
                        "src": "182701:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6493,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "182701:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "182683:30:0"
                  },
                  "returnParameters": {
                    "id": 6497,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "182732:0:0"
                  },
                  "scope": 7392,
                  "src": "182662:225:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3581
                  ],
                  "body": {
                    "id": 6535,
                    "nodeType": "Block",
                    "src": "182966:143:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6521,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "182976:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6522,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182976:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6523,
                        "nodeType": "ExpressionStatement",
                        "src": "182976:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6524,
                              "name": "poolAdmins",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5940,
                              "src": "183024:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6526,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 6525,
                              "name": "poolAdmin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6515,
                              "src": "183035:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "183024:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6527,
                            "name": "allowed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6517,
                            "src": "183048:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "183024:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6529,
                        "nodeType": "ExpressionStatement",
                        "src": "183024:31:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6531,
                              "name": "poolAdmin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6515,
                              "src": "183083:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6532,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6517,
                              "src": "183094:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 6530,
                            "name": "PoolAdminSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3338,
                            "src": "183070:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,bool)"
                            }
                          },
                          "id": 6533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183070:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6534,
                        "nodeType": "EmitStatement",
                        "src": "183065:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "9185192a",
                  "id": 6536,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6519,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "182957:8:0"
                  },
                  "parameters": {
                    "id": 6518,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6515,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6536,
                        "src": "182915:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6514,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "182915:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6517,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6536,
                        "src": "182934:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6516,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "182934:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "182914:33:0"
                  },
                  "returnParameters": {
                    "id": 6520,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "182966:0:0"
                  },
                  "scope": 7392,
                  "src": "182893:216:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3587
                  ],
                  "body": {
                    "id": 6553,
                    "nodeType": "Block",
                    "src": "183169:123:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6542,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "183179:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6543,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183179:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6544,
                        "nodeType": "ExpressionStatement",
                        "src": "183179:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6545,
                            "name": "openToPublic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5920,
                            "src": "183227:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6546,
                            "name": "open",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6538,
                            "src": "183242:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "183227:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6548,
                        "nodeType": "ExpressionStatement",
                        "src": "183227:19:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6550,
                              "name": "open",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6538,
                              "src": "183280:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 6549,
                            "name": "PoolOpenedToPublic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3331,
                            "src": "183261:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$",
                              "typeString": "function (bool)"
                            }
                          },
                          "id": 6551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183261:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6552,
                        "nodeType": "EmitStatement",
                        "src": "183256:29:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "a43baa3d",
                  "id": 6554,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setOpenToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6540,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "183160:8:0"
                  },
                  "parameters": {
                    "id": 6539,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6538,
                        "mutability": "mutable",
                        "name": "open",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6554,
                        "src": "183140:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6537,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "183140:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "183139:11:0"
                  },
                  "returnParameters": {
                    "id": 6541,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "183169:0:0"
                  },
                  "scope": 7392,
                  "src": "183115:177:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3593
                  ],
                  "body": {
                    "id": 6631,
                    "nodeType": "Block",
                    "src": "183476:592:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6560,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "183486:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6561,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183486:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6562,
                        "nodeType": "ExpressionStatement",
                        "src": "183486:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6564,
                                "name": "State",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "183534:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                  "typeString": "type(enum IPool.State)"
                                }
                              },
                              "id": 6565,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Finalized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "183534:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6563,
                            "name": "_isValidState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7270,
                            "src": "183520:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State) view"
                            }
                          },
                          "id": 6566,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183520:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6567,
                        "nodeType": "ExpressionStatement",
                        "src": "183520:30:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6570,
                                  "name": "amt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6556,
                                  "src": "183585:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6569,
                                "name": "isDepositAllowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7156,
                                "src": "183568:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (uint256) view returns (bool)"
                                }
                              },
                              "id": 6571,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "183568:21:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4445505f4e4f545f414c4c4f574544",
                              "id": 6572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "183591:19:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b1bed0e3c4c360e8c8f7710b3ae9e4f79e378f70781415028aa0ea288bf988c8",
                                "typeString": "literal_string \"P:DEP_NOT_ALLOWED\""
                              },
                              "value": "P:DEP_NOT_ALLOWED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b1bed0e3c4c360e8c8f7710b3ae9e4f79e378f70781415028aa0ea288bf988c8",
                                "typeString": "literal_string \"P:DEP_NOT_ALLOWED\""
                              }
                            ],
                            "id": 6568,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "183560:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183560:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6574,
                        "nodeType": "ExpressionStatement",
                        "src": "183560:51:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6575,
                              "name": "withdrawCooldown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5950,
                              "src": "183622:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6578,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6576,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "183639:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6577,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "183639:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "183622:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6581,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "183661:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6580,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "183653:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 6579,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "183653:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6582,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "183653:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "183622:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6584,
                        "nodeType": "ExpressionStatement",
                        "src": "183622:41:0"
                      },
                      {
                        "assignments": [
                          6586
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6586,
                            "mutability": "mutable",
                            "name": "wad",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6631,
                            "src": "183756:11:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6585,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "183756:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6590,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6588,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6556,
                              "src": "183777:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6587,
                            "name": "_toWad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7244,
                            "src": "183770:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) view returns (uint256)"
                            }
                          },
                          "id": 6589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183770:11:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "183756:25:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6594,
                              "name": "depositDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5928,
                              "src": "183817:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6596,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "183840:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 6597,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "183840:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 6595,
                                "name": "balanceOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1174,
                                "src": "183830:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 6598,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "183830:21:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6599,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6586,
                              "src": "183853:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6600,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "183858:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6601,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "183858:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6591,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "183791:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updateDepositDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5294,
                            "src": "183791:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (mapping(address => uint256),uint256,uint256,address)"
                            }
                          },
                          "id": 6602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183791:78:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6603,
                        "nodeType": "ExpressionStatement",
                        "src": "183791:78:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6607,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "183912:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6608,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "183912:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6609,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "183924:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6610,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6556,
                              "src": "183941:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6604,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5885,
                              "src": "183880:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 6606,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4626,
                            "src": "183880:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$77_$",
                              "typeString": "function (contract IERC20,address,address,uint256)"
                            }
                          },
                          "id": 6611,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183880:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6612,
                        "nodeType": "ExpressionStatement",
                        "src": "183880:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6614,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "183961:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6615,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "183961:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6616,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6586,
                              "src": "183973:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6613,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2300
                            ],
                            "referencedDeclaration": 2300,
                            "src": "183955:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183955:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6618,
                        "nodeType": "ExpressionStatement",
                        "src": "183955:22:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6619,
                            "name": "_emitBalanceUpdatedEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "183988:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183988:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6621,
                        "nodeType": "ExpressionStatement",
                        "src": "183988:26:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6623,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "184038:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6624,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184038:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 6627,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "184058:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 6626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "184050:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 6625,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "184050:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "184050:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6622,
                            "name": "Cooldown",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3326,
                            "src": "184029:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184029:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6630,
                        "nodeType": "EmitStatement",
                        "src": "184024:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "b6b55f25",
                  "id": 6632,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deposit",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6558,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "183467:8:0"
                  },
                  "parameters": {
                    "id": 6557,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6556,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6632,
                        "src": "183445:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6555,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "183445:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "183444:13:0"
                  },
                  "returnParameters": {
                    "id": 6559,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "183476:0:0"
                  },
                  "scope": 7392,
                  "src": "183428:640:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3597
                  ],
                  "body": {
                    "id": 6664,
                    "nodeType": "Block",
                    "src": "184120:183:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6638,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "184148:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 6639,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "184148:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 6637,
                                  "name": "balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1174,
                                  "src": "184138:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 6640,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "184138:21:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6643,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "184171:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 6642,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "184163:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 6641,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "184163:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 6644,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "184163:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "184138:35:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a5a45524f5f42414c",
                              "id": 6646,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "184175:12:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a1f8e3f37a19d51fe37ff3e329ba0d1390187176069ea1d2f0748a14f1a3f585",
                                "typeString": "literal_string \"P:ZERO_BAL\""
                              },
                              "value": "P:ZERO_BAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a1f8e3f37a19d51fe37ff3e329ba0d1390187176069ea1d2f0748a14f1a3f585",
                                "typeString": "literal_string \"P:ZERO_BAL\""
                              }
                            ],
                            "id": 6636,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "184130:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184130:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6648,
                        "nodeType": "ExpressionStatement",
                        "src": "184130:58:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6649,
                              "name": "withdrawCooldown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5950,
                              "src": "184198:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6652,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6650,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "184215:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184215:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "184198:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6653,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "184229:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 6654,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "184229:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "184198:46:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6656,
                        "nodeType": "ExpressionStatement",
                        "src": "184198:46:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6658,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "184268:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6659,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184268:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6660,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "184280:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 6661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184280:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6657,
                            "name": "Cooldown",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3326,
                            "src": "184259:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6662,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184259:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6663,
                        "nodeType": "EmitStatement",
                        "src": "184254:42:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "73ef9a50",
                  "id": 6665,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "intendToWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6634,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "184111:8:0"
                  },
                  "parameters": {
                    "id": 6633,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184099:2:0"
                  },
                  "returnParameters": {
                    "id": 6635,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184120:0:0"
                  },
                  "scope": 7392,
                  "src": "184074:229:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3601
                  ],
                  "body": {
                    "id": 6701,
                    "nodeType": "Block",
                    "src": "184353:187:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 6670,
                                  "name": "withdrawCooldown",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5950,
                                  "src": "184371:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 6673,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6671,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "184388:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 6672,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "184388:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "184371:28:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6676,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "184411:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 6675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "184403:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 6674,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "184403:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 6677,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "184403:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "184371:42:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4e4f545f5749544844524157494e47",
                              "id": 6679,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "184415:19:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c46b07d1710ac7fb6e170141753c6cb6f0c52f5a44af3f9c301263235266de4e",
                                "typeString": "literal_string \"P:NOT_WITHDRAWING\""
                              },
                              "value": "P:NOT_WITHDRAWING"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c46b07d1710ac7fb6e170141753c6cb6f0c52f5a44af3f9c301263235266de4e",
                                "typeString": "literal_string \"P:NOT_WITHDRAWING\""
                              }
                            ],
                            "id": 6669,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "184363:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184363:72:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6681,
                        "nodeType": "ExpressionStatement",
                        "src": "184363:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6682,
                              "name": "withdrawCooldown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5950,
                              "src": "184445:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6685,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6683,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "184462:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6684,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184462:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "184445:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6688,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "184484:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6687,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "184476:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 6686,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "184476:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6689,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "184476:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "184445:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6691,
                        "nodeType": "ExpressionStatement",
                        "src": "184445:41:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6693,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "184510:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6694,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184510:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 6697,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "184530:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 6696,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "184522:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 6695,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "184522:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6698,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "184522:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6692,
                            "name": "Cooldown",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3326,
                            "src": "184501:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184501:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6700,
                        "nodeType": "EmitStatement",
                        "src": "184496:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "84b76824",
                  "id": 6702,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6667,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "184344:8:0"
                  },
                  "parameters": {
                    "id": 6666,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184332:2:0"
                  },
                  "returnParameters": {
                    "id": 6668,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184353:0:0"
                  },
                  "scope": 7392,
                  "src": "184309:231:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 6737,
                    "nodeType": "Block",
                    "src": "184789:313:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6715,
                                    "name": "lockupPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5917,
                                    "src": "184832:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6711,
                                      "name": "depositDate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5928,
                                      "src": "184807:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 6713,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6712,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6705,
                                      "src": "184819:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "184807:20:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6714,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 711,
                                  "src": "184807:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6716,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "184807:38:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6717,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "184849:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 6718,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "184849:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "184807:57:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a46554e44535f4c4f434b4544",
                              "id": 6720,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "184870:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2c0f6d52ffdeb0bd25a230e1a7659ada483ed512b216d6ee194ba6285cb9fd4c",
                                "typeString": "literal_string \"P:FUNDS_LOCKED\""
                              },
                              "value": "P:FUNDS_LOCKED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2c0f6d52ffdeb0bd25a230e1a7659ada483ed512b216d6ee194ba6285cb9fd4c",
                                "typeString": "literal_string \"P:FUNDS_LOCKED\""
                              }
                            ],
                            "id": 6710,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "184799:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184799:88:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6722,
                        "nodeType": "ExpressionStatement",
                        "src": "184799:88:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6733,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6728,
                                    "name": "wad",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6707,
                                    "src": "184976:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6725,
                                        "name": "account",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6705,
                                        "src": "184963:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 6724,
                                      "name": "balanceOf",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1174,
                                      "src": "184953:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                        "typeString": "function (address) view returns (uint256)"
                                      }
                                    },
                                    "id": 6726,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "184953:18:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6727,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 728,
                                  "src": "184953:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6729,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "184953:27:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 6730,
                                  "name": "totalCustodyAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5962,
                                  "src": "184984:21:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 6732,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 6731,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6705,
                                  "src": "185006:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "184984:30:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "184953:61:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e5355465f5452414e535f42414c",
                              "id": 6734,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "185016:19:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_95a4abeb1e7dd488cffb41ab262073281f9caa0b77fe310838a8fec46f9561e3",
                                "typeString": "literal_string \"P:INSUF_TRANS_BAL\""
                              },
                              "value": "P:INSUF_TRANS_BAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_95a4abeb1e7dd488cffb41ab262073281f9caa0b77fe310838a8fec46f9561e3",
                                "typeString": "literal_string \"P:INSUF_TRANS_BAL\""
                              }
                            ],
                            "id": 6723,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "184945:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6735,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184945:91:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6736,
                        "nodeType": "ExpressionStatement",
                        "src": "184945:91:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6703,
                    "nodeType": "StructuredDocumentation",
                    "src": "184546:172:0",
                    "text": "@dev   Checks that the account can withdraw an amount.\n@param account The address of the account.\n@param wad     The amount to withdraw."
                  },
                  "id": 6738,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_canWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 6708,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6705,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6738,
                        "src": "184745:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6704,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "184745:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6707,
                        "mutability": "mutable",
                        "name": "wad",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6738,
                        "src": "184762:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6706,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "184762:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "184744:30:0"
                  },
                  "returnParameters": {
                    "id": 6709,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184789:0:0"
                  },
                  "scope": 7392,
                  "src": "184723:379:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3607
                  ],
                  "body": {
                    "id": 6808,
                    "nodeType": "Block",
                    "src": "185157:782:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6744,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "185167:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185167:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6746,
                        "nodeType": "ExpressionStatement",
                        "src": "185167:24:0"
                      },
                      {
                        "assignments": [
                          6748
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6748,
                            "mutability": "mutable",
                            "name": "wad",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6808,
                            "src": "185201:11:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6747,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "185201:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6752,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6750,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6740,
                              "src": "185222:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6749,
                            "name": "_toWad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7244,
                            "src": "185215:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) view returns (uint256)"
                            }
                          },
                          "id": 6751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185215:11:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "185201:25:0"
                      },
                      {
                        "assignments": [
                          6754,
                          6756
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6754,
                            "mutability": "mutable",
                            "name": "lpCooldownPeriod",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6808,
                            "src": "185237:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6753,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "185237:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6756,
                            "mutability": "mutable",
                            "name": "lpWithdrawWindow",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6808,
                            "src": "185263:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6755,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "185263:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6762,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6758,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5900,
                                  "src": "185300:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6757,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "185291:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 6759,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "185291:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            "id": 6760,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getLpCooldownParams",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2869,
                            "src": "185291:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function () view external returns (uint256,uint256)"
                            }
                          },
                          "id": 6761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185291:44:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "185236:99:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6764,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "185359:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6765,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "185359:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6766,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6748,
                              "src": "185371:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6763,
                            "name": "_canWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6738,
                            "src": "185346:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) view"
                            }
                          },
                          "id": 6767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185346:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6768,
                        "nodeType": "ExpressionStatement",
                        "src": "185346:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6782,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6779,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6770,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "185394:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 6771,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "185394:15:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 6777,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 6772,
                                              "name": "withdrawCooldown",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5950,
                                              "src": "185413:16:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                              }
                                            },
                                            "id": 6775,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 6773,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -15,
                                                "src": "185430:3:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_magic_message",
                                                  "typeString": "msg"
                                                }
                                              },
                                              "id": 6774,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "sender",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": null,
                                              "src": "185430:10:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "185413:28:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "+",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 6776,
                                            "name": "lpCooldownPeriod",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6754,
                                            "src": "185444:16:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "185413:47:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 6778,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "185412:49:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "185394:67:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6780,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "185393:69:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 6781,
                                "name": "lpWithdrawWindow",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6756,
                                "src": "185466:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "185393:89:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a57495448445241575f4e4f545f414c4c4f574544",
                              "id": 6783,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "185484:24:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_575c98843846db40352058cd50eb14a4a03213eb75efcfea1f1fbcac3ca420ef",
                                "typeString": "literal_string \"P:WITHDRAW_NOT_ALLOWED\""
                              },
                              "value": "P:WITHDRAW_NOT_ALLOWED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_575c98843846db40352058cd50eb14a4a03213eb75efcfea1f1fbcac3ca420ef",
                                "typeString": "literal_string \"P:WITHDRAW_NOT_ALLOWED\""
                              }
                            ],
                            "id": 6769,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "185385:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185385:124:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6785,
                        "nodeType": "ExpressionStatement",
                        "src": "185385:124:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6787,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "185526:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6788,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "185526:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6789,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6748,
                              "src": "185538:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6786,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2343
                            ],
                            "referencedDeclaration": 2343,
                            "src": "185520:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185520:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6791,
                        "nodeType": "ExpressionStatement",
                        "src": "185520:22:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6792,
                            "name": "withdrawFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              6927
                            ],
                            "referencedDeclaration": 6927,
                            "src": "185597:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6793,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185597:15:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6794,
                        "nodeType": "ExpressionStatement",
                        "src": "185597:15:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6796,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "185855:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6797,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "185855:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 6800,
                                    "name": "_recognizeLosses",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      3175
                                    ],
                                    "referencedDeclaration": 3175,
                                    "src": "185875:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                      "typeString": "function () returns (uint256)"
                                    }
                                  },
                                  "id": 6801,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "185875:18:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6798,
                                  "name": "amt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6740,
                                  "src": "185867:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 6799,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 728,
                                "src": "185867:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6802,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "185867:27:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6795,
                            "name": "_transferLiquidityLockerFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7391,
                            "src": "185825:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6803,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185825:70:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6804,
                        "nodeType": "ExpressionStatement",
                        "src": "185825:70:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6805,
                            "name": "_emitBalanceUpdatedEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "185906:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185906:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6807,
                        "nodeType": "ExpressionStatement",
                        "src": "185906:26:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "2e1a7d4d",
                  "id": 6809,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6742,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "185148:8:0"
                  },
                  "parameters": {
                    "id": 6741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6740,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6809,
                        "src": "185126:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6739,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "185126:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "185125:13:0"
                  },
                  "returnParameters": {
                    "id": 6743,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "185157:0:0"
                  },
                  "scope": 7392,
                  "src": "185108:831:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2257
                  ],
                  "body": {
                    "id": 6884,
                    "nodeType": "Block",
                    "src": "186232:664:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6820,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "186242:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186242:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6822,
                        "nodeType": "ExpressionStatement",
                        "src": "186242:24:0"
                      },
                      {
                        "assignments": [
                          6824,
                          6826
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6824,
                            "mutability": "mutable",
                            "name": "lpCooldownPeriod",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6884,
                            "src": "186278:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6823,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "186278:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6826,
                            "mutability": "mutable",
                            "name": "lpWithdrawWindow",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6884,
                            "src": "186304:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6825,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "186304:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6832,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6828,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5900,
                                  "src": "186341:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6827,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "186332:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 6829,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "186332:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            "id": 6830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getLpCooldownParams",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2869,
                            "src": "186332:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function () view external returns (uint256,uint256)"
                            }
                          },
                          "id": 6831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186332:44:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "186277:99:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6834,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6812,
                              "src": "186400:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6835,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6816,
                              "src": "186406:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6833,
                            "name": "_canWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6738,
                            "src": "186387:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) view"
                            }
                          },
                          "id": 6836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186387:23:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6837,
                        "nodeType": "ExpressionStatement",
                        "src": "186387:23:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6839,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "186428:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 6840,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "186428:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6847,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6845,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 6841,
                                          "name": "withdrawCooldown",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5950,
                                          "src": "186447:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                            "typeString": "mapping(address => uint256)"
                                          }
                                        },
                                        "id": 6843,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 6842,
                                          "name": "to",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6814,
                                          "src": "186464:2:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "186447:20:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6844,
                                        "name": "lpCooldownPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6824,
                                        "src": "186470:16:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "186447:39:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6846,
                                      "name": "lpWithdrawWindow",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6826,
                                      "src": "186489:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "186447:58:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6848,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "186446:60:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "186428:78:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a544f5f4e4f545f414c4c4f574544",
                              "id": 6850,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "186508:18:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fe90c0870a5c4af2cce1e73d6c6858f1da9cfa34892ed429e9a0cbf981051164",
                                "typeString": "literal_string \"P:TO_NOT_ALLOWED\""
                              },
                              "value": "P:TO_NOT_ALLOWED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fe90c0870a5c4af2cce1e73d6c6858f1da9cfa34892ed429e9a0cbf981051164",
                                "typeString": "literal_string \"P:TO_NOT_ALLOWED\""
                              }
                            ],
                            "id": 6838,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "186420:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6851,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186420:107:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6852,
                        "nodeType": "ExpressionStatement",
                        "src": "186420:107:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6861,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6855,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6812,
                                    "src": "186615:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 6854,
                                  "name": "recognizableLossesOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2148,
                                  "src": "186594:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 6856,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "186594:26:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6859,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "186632:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 6858,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "186624:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 6857,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "186624:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 6860,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "186624:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "186594:40:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a5245434f475f4c4f53534553",
                              "id": 6862,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "186674:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8de3ef57702748caf51e2fffc5b4f6a3f6bdc62e1293e4a0c3d7ee9736796632",
                                "typeString": "literal_string \"P:RECOG_LOSSES\""
                              },
                              "value": "P:RECOG_LOSSES"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8de3ef57702748caf51e2fffc5b4f6a3f6bdc62e1293e4a0c3d7ee9736796632",
                                "typeString": "literal_string \"P:RECOG_LOSSES\""
                              }
                            ],
                            "id": 6853,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "186586:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186586:105:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6864,
                        "nodeType": "ExpressionStatement",
                        "src": "186586:105:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6868,
                              "name": "depositDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5928,
                              "src": "186813:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6870,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6814,
                                  "src": "186836:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6869,
                                "name": "balanceOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1174,
                                "src": "186826:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 6871,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "186826:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6872,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6816,
                              "src": "186841:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6873,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6814,
                              "src": "186846:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6865,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "186787:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6867,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updateDepositDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5294,
                            "src": "186787:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (mapping(address => uint256),uint256,uint256,address)"
                            }
                          },
                          "id": 6874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186787:62:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6875,
                        "nodeType": "ExpressionStatement",
                        "src": "186787:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6879,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6812,
                              "src": "186875:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6880,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6814,
                              "src": "186881:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6881,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6816,
                              "src": "186885:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6876,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "186859:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_Pool_$7392",
                                "typeString": "contract super Pool"
                              }
                            },
                            "id": 6878,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2257,
                            "src": "186859:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 6882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186859:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6883,
                        "nodeType": "ExpressionStatement",
                        "src": "186859:30:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6810,
                    "nodeType": "StructuredDocumentation",
                    "src": "185945:206:0",
                    "text": "@dev   Transfers PoolFDTs.\n@param from Th address  sending   PoolFDTs.\n@param to   The address receiving PoolFDTs.\n@param wad  The amount of PoolFDTs to transfer."
                  },
                  "id": 6885,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6818,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "186223:8:0"
                  },
                  "parameters": {
                    "id": 6817,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6812,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6885,
                        "src": "186175:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6811,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "186175:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6814,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6885,
                        "src": "186189:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6813,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "186189:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6816,
                        "mutability": "mutable",
                        "name": "wad",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6885,
                        "src": "186201:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6815,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "186201:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "186174:39:0"
                  },
                  "returnParameters": {
                    "id": 6819,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "186232:0:0"
                  },
                  "scope": 7392,
                  "src": "186156:740:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    120,
                    3612
                  ],
                  "body": {
                    "id": 6926,
                    "nodeType": "Block",
                    "src": "186961:354:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6891,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "186971:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6892,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186971:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6893,
                        "nodeType": "ExpressionStatement",
                        "src": "186971:24:0"
                      },
                      {
                        "assignments": [
                          6895
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6895,
                            "mutability": "mutable",
                            "name": "withdrawableFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6926,
                            "src": "187005:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6894,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "187005:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6898,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6896,
                            "name": "_prepareWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1699,
                            "src": "187033:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                              "typeString": "function () returns (uint256)"
                            }
                          },
                          "id": 6897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187033:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "187005:46:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6899,
                            "name": "withdrawableFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6895,
                            "src": "187066:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6902,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "187095:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6901,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "187087:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 6900,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "187087:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6903,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "187087:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "187066:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6906,
                        "nodeType": "IfStatement",
                        "src": "187062:44:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 6890,
                          "id": 6905,
                          "nodeType": "Return",
                          "src": "187099:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6908,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "187146:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "187146:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6910,
                              "name": "withdrawableFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6895,
                              "src": "187158:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6907,
                            "name": "_transferLiquidityLockerFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7391,
                            "src": "187116:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187116:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6912,
                        "nodeType": "ExpressionStatement",
                        "src": "187116:60:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6913,
                            "name": "_emitBalanceUpdatedEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "187186:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187186:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6915,
                        "nodeType": "ExpressionStatement",
                        "src": "187186:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6916,
                            "name": "interestSum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3131,
                            "src": "187223:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6919,
                                "name": "withdrawableFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6895,
                                "src": "187253:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6917,
                                "name": "interestSum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3131,
                                "src": "187237:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "187237:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6920,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "187237:34:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "187223:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6922,
                        "nodeType": "ExpressionStatement",
                        "src": "187223:48:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6923,
                            "name": "_updateFundsTokenBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3229
                            ],
                            "referencedDeclaration": 3229,
                            "src": "187282:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 6924,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187282:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 6925,
                        "nodeType": "ExpressionStatement",
                        "src": "187282:26:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "24600fc3",
                  "id": 6927,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6889,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "contractScope": null,
                        "id": 6887,
                        "name": "IPool",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3697,
                        "src": "186943:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPool_$3697",
                          "typeString": "contract IPool"
                        }
                      },
                      {
                        "contractScope": null,
                        "id": 6888,
                        "name": "IBasicFDT",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 141,
                        "src": "186950:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBasicFDT_$141",
                          "typeString": "contract IBasicFDT"
                        }
                      }
                    ],
                    "src": "186934:26:0"
                  },
                  "parameters": {
                    "id": 6886,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "186924:2:0"
                  },
                  "returnParameters": {
                    "id": 6890,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "186961:0:0"
                  },
                  "scope": 7392,
                  "src": "186902:413:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3620
                  ],
                  "body": {
                    "id": 7003,
                    "nodeType": "Block",
                    "src": "187408:636:0",
                    "statements": [
                      {
                        "assignments": [
                          6936
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6936,
                            "mutability": "mutable",
                            "name": "oldAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7003,
                            "src": "187418:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6935,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "187418:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6943,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6937,
                              "name": "custodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5957,
                              "src": "187446:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 6940,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6938,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "187463:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6939,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "187463:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "187446:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 6942,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 6941,
                            "name": "custodian",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6929,
                            "src": "187475:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "187446:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "187418:67:0"
                      },
                      {
                        "assignments": [
                          6945
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6945,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7003,
                            "src": "187495:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6944,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "187495:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6950,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6948,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6931,
                              "src": "187540:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6946,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6936,
                              "src": "187523:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6947,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "187523:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187523:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "187495:52:0"
                      },
                      {
                        "assignments": [
                          6952
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6952,
                            "mutability": "mutable",
                            "name": "newTotalAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7003,
                            "src": "187557:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6951,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "187557:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6960,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6958,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6931,
                              "src": "187623:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6953,
                                "name": "totalCustodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5962,
                                "src": "187585:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 6956,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6954,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "187607:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 6955,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "187607:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "187585:33:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6957,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "187585:37:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187585:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "187557:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6964,
                              "name": "custodian",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6929,
                              "src": "187680:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6965,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6931,
                              "src": "187691:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6966,
                              "name": "newTotalAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6952,
                              "src": "187699:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6968,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "187728:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 6969,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "187728:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 6967,
                                "name": "balanceOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1174,
                                "src": "187718:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 6970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "187718:21:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6961,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "187641:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6963,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "increaseCustodyAllowanceChecks",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5362,
                            "src": "187641:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_pure$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256,uint256) pure"
                            }
                          },
                          "id": 6971,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187641:99:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6972,
                        "nodeType": "ExpressionStatement",
                        "src": "187641:99:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6980,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6973,
                                "name": "custodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5957,
                                "src": "187751:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 6977,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6974,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "187768:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 6975,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "187768:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "187751:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6978,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 6976,
                              "name": "custodian",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6929,
                              "src": "187780:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "187751:39:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6979,
                            "name": "newAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6945,
                            "src": "187793:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "187751:54:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6981,
                        "nodeType": "ExpressionStatement",
                        "src": "187751:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6982,
                              "name": "totalCustodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5962,
                              "src": "187815:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6985,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6983,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "187837:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6984,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "187837:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "187815:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6986,
                            "name": "newTotalAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6952,
                            "src": "187857:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "187815:59:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6988,
                        "nodeType": "ExpressionStatement",
                        "src": "187815:59:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6990,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "187913:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6991,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "187913:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6992,
                              "name": "custodian",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6929,
                              "src": "187925:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6993,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6936,
                              "src": "187936:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6994,
                              "name": "newAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6945,
                              "src": "187950:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6989,
                            "name": "CustodyAllowanceChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3292,
                            "src": "187889:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 6995,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187889:74:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6996,
                        "nodeType": "EmitStatement",
                        "src": "187884:79:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6998,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "188007:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "188007:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7000,
                              "name": "newTotalAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6952,
                              "src": "188019:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6997,
                            "name": "TotalCustodyAllowanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3352,
                            "src": "187978:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 7001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187978:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7002,
                        "nodeType": "EmitStatement",
                        "src": "187973:64:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "27f91856",
                  "id": 7004,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6933,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "187399:8:0"
                  },
                  "parameters": {
                    "id": 6932,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6929,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7004,
                        "src": "187355:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6928,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "187355:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6931,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7004,
                        "src": "187374:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6930,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "187374:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "187354:35:0"
                  },
                  "returnParameters": {
                    "id": 6934,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "187408:0:0"
                  },
                  "scope": 7392,
                  "src": "187321:723:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3630
                  ],
                  "body": {
                    "id": 7084,
                    "nodeType": "Block",
                    "src": "188139:621:0",
                    "statements": [
                      {
                        "assignments": [
                          7015
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7015,
                            "mutability": "mutable",
                            "name": "oldAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7084,
                            "src": "188149:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7014,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "188149:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7022,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 7016,
                              "name": "custodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5957,
                              "src": "188172:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 7018,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7017,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7006,
                              "src": "188189:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "188172:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 7021,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7019,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "188195:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7020,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "188195:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "188172:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "188149:57:0"
                      },
                      {
                        "assignments": [
                          7024
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7024,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7084,
                            "src": "188216:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7023,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "188216:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7029,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7027,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7010,
                              "src": "188256:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7025,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7015,
                              "src": "188239:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7026,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 728,
                            "src": "188239:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7028,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188239:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "188216:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7033,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7006,
                              "src": "188308:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7034,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7008,
                              "src": "188314:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7035,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7010,
                              "src": "188318:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7030,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "188274:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 7032,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferByCustodianChecks",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5322,
                            "src": "188274:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_pure$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256) pure"
                            }
                          },
                          "id": 7036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188274:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7037,
                        "nodeType": "ExpressionStatement",
                        "src": "188274:51:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7038,
                                "name": "custodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5957,
                                "src": "188336:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7042,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7039,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7006,
                                "src": "188353:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "188336:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7043,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7040,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "188359:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7041,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "188359:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "188336:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7044,
                            "name": "newAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7024,
                            "src": "188373:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "188336:49:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7046,
                        "nodeType": "ExpressionStatement",
                        "src": "188336:49:0"
                      },
                      {
                        "assignments": [
                          7048
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7048,
                            "mutability": "mutable",
                            "name": "newTotalAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7084,
                            "src": "188395:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7047,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "188395:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7055,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7053,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7010,
                              "src": "188464:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7049,
                                "name": "totalCustodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5962,
                                "src": "188432:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 7051,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7050,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7006,
                                "src": "188454:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "188432:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7052,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 728,
                            "src": "188432:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188432:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "188395:76:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7060,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 7056,
                              "name": "totalCustodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5962,
                              "src": "188481:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7058,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7057,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7006,
                              "src": "188503:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "188481:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7059,
                            "name": "newTotalAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7048,
                            "src": "188518:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "188481:54:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7061,
                        "nodeType": "ExpressionStatement",
                        "src": "188481:54:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7063,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "188566:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "188566:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7065,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7006,
                              "src": "188578:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7066,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7008,
                              "src": "188584:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7067,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7010,
                              "src": "188588:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7062,
                            "name": "CustodyTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3281,
                            "src": "188550:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 7068,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188550:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7069,
                        "nodeType": "EmitStatement",
                        "src": "188545:50:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7071,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7006,
                              "src": "188634:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7072,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "188640:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "188640:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7074,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7015,
                              "src": "188652:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7075,
                              "name": "newAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7024,
                              "src": "188666:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7070,
                            "name": "CustodyAllowanceChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3292,
                            "src": "188610:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 7076,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188610:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7077,
                        "nodeType": "EmitStatement",
                        "src": "188605:74:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7079,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "188723:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "188723:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7081,
                              "name": "newTotalAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7048,
                              "src": "188735:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7078,
                            "name": "TotalCustodyAllowanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3352,
                            "src": "188694:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 7082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188694:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7083,
                        "nodeType": "EmitStatement",
                        "src": "188689:64:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "2ac04ac8",
                  "id": 7085,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7012,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "188130:8:0"
                  },
                  "parameters": {
                    "id": 7011,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7006,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7085,
                        "src": "188079:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7005,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "188079:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7008,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7085,
                        "src": "188093:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7007,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "188093:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7010,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7085,
                        "src": "188105:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7009,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "188105:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "188078:42:0"
                  },
                  "returnParameters": {
                    "id": 7013,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "188139:0:0"
                  },
                  "scope": 7392,
                  "src": "188050:710:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3636
                  ],
                  "body": {
                    "id": 7104,
                    "nodeType": "Block",
                    "src": "188921:93:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7094,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7087,
                              "src": "188952:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7097,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "188967:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 7096,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "188959:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 7095,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "188959:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 7098,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "188959:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7100,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5900,
                                  "src": "188993:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7099,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "188984:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 7101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "188984:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7091,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "188931:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 7093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "reclaimERC20",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5414,
                            "src": "188931:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_address_$_t_address_$_t_contract$_IMapleGlobals_$2870_$returns$__$",
                              "typeString": "function (address,address,contract IMapleGlobals)"
                            }
                          },
                          "id": 7102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188931:76:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7103,
                        "nodeType": "ExpressionStatement",
                        "src": "188931:76:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "8905fd4f",
                  "id": 7105,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "reclaimERC20",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7089,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "188912:8:0"
                  },
                  "parameters": {
                    "id": 7088,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7087,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7105,
                        "src": "188888:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7086,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "188888:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "188887:15:0"
                  },
                  "returnParameters": {
                    "id": 7090,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "188921:0:0"
                  },
                  "scope": 7392,
                  "src": "188866:148:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3650
                  ],
                  "body": {
                    "id": 7127,
                    "nodeType": "Block",
                    "src": "189291:86:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7121,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7107,
                              "src": "189323:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7122,
                              "name": "_liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7109,
                              "src": "189331:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7123,
                              "name": "_staker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7111,
                              "src": "189348:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7124,
                              "name": "_stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7113,
                              "src": "189357:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7119,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "189308:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 7120,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "BPTVal",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5537,
                            "src": "189308:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_address_$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address,address,address) view returns (uint256)"
                            }
                          },
                          "id": 7125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "189308:62:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7118,
                        "id": 7126,
                        "nodeType": "Return",
                        "src": "189301:69:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "681cb10a",
                  "id": 7128,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "BPTVal",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7115,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "189259:8:0"
                  },
                  "parameters": {
                    "id": 7114,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7107,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7128,
                        "src": "189141:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7106,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189141:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7109,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7128,
                        "src": "189165:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7108,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189165:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7111,
                        "mutability": "mutable",
                        "name": "_staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7128,
                        "src": "189198:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189198:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7113,
                        "mutability": "mutable",
                        "name": "_stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7128,
                        "src": "189223:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7112,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189223:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189131:118:0"
                  },
                  "returnParameters": {
                    "id": 7118,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7117,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7128,
                        "src": "189282:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7116,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189282:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189281:9:0"
                  },
                  "scope": 7392,
                  "src": "189116:261:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3658
                  ],
                  "body": {
                    "id": 7155,
                    "nodeType": "Block",
                    "src": "189465:175:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 7153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 7141,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 7136,
                                  "name": "openToPublic",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5920,
                                  "src": "189483:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 7137,
                                    "name": "allowedLiquidityProviders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5945,
                                    "src": "189499:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                      "typeString": "mapping(address => bool)"
                                    }
                                  },
                                  "id": 7140,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7138,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "189525:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 7139,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "189525:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "189499:37:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "189483:53:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 7142,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "189482:55:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7149,
                                  "name": "depositAmt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7130,
                                  "src": "189606:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7146,
                                      "name": "principalOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5911,
                                      "src": "189588:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 7143,
                                        "name": "_balanceOfLiquidityLocker",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7256,
                                        "src": "189556:25:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                          "typeString": "function () view returns (uint256)"
                                        }
                                      },
                                      "id": 7144,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "189556:27:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7145,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 711,
                                    "src": "189556:31:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 7147,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "189556:45:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 7148,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 711,
                                "src": "189556:49:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "189556:61:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 7151,
                              "name": "liquidityCap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5914,
                              "src": "189621:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "189556:77:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "189482:151:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 7135,
                        "id": 7154,
                        "nodeType": "Return",
                        "src": "189475:158:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "80e7ce85",
                  "id": 7156,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isDepositAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7132,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "189436:8:0"
                  },
                  "parameters": {
                    "id": 7131,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7130,
                        "mutability": "mutable",
                        "name": "depositAmt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7156,
                        "src": "189409:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7129,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189409:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189408:20:0"
                  },
                  "returnParameters": {
                    "id": 7135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7134,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7156,
                        "src": "189459:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7133,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "189459:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189458:6:0"
                  },
                  "scope": 7392,
                  "src": "189383:257:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3672
                  ],
                  "body": {
                    "id": 7184,
                    "nodeType": "Block",
                    "src": "189757:147:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7173,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5900,
                                  "src": "189819:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7172,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "189810:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 7174,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "189810:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7175,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5894,
                              "src": "189834:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7178,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "189854:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 7177,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "189846:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 7176,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "189846:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 7179,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "189846:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7180,
                              "name": "poolDelegate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5888,
                              "src": "189871:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7181,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5897,
                              "src": "189885:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7170,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "189774:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 7171,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getInitialStakeRequirements",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5808,
                            "src": "189774:35:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_contract$_IMapleGlobals_$2870_$_t_address_$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$",
                              "typeString": "function (contract IMapleGlobals,address,address,address,address) view returns (uint256,uint256,bool,uint256,uint256)"
                            }
                          },
                          "id": 7182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "189774:123:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,bool,uint256,uint256)"
                          }
                        },
                        "functionReturnParameters": 7169,
                        "id": 7183,
                        "nodeType": "Return",
                        "src": "189767:130:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "13bf9e7e",
                  "id": 7185,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getInitialStakeRequirements",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7158,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "189692:8:0"
                  },
                  "parameters": {
                    "id": 7157,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "189682:2:0"
                  },
                  "returnParameters": {
                    "id": 7169,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7160,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7185,
                        "src": "189715:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7159,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189715:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7162,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7185,
                        "src": "189724:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7161,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189724:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7164,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7185,
                        "src": "189733:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7163,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "189733:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7166,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7185,
                        "src": "189739:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7165,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189739:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7168,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7185,
                        "src": "189748:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7167,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189748:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189714:42:0"
                  },
                  "scope": 7392,
                  "src": "189646:258:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3690
                  ],
                  "body": {
                    "id": 7212,
                    "nodeType": "Block",
                    "src": "190156:132:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7205,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7187,
                              "src": "190203:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7206,
                              "name": "_liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7189,
                              "src": "190211:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7207,
                              "name": "_staker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7191,
                              "src": "190228:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7208,
                              "name": "_stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7193,
                              "src": "190237:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7209,
                              "name": "_liquidityAssetAmountRequired",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7195,
                              "src": "190251:29:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7203,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "190173:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 7204,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getPoolSharesRequired",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5746,
                            "src": "190173:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (address,address,address,address,uint256) view returns (uint256,uint256)"
                            }
                          },
                          "id": 7210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "190173:108:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "functionReturnParameters": 7202,
                        "id": 7211,
                        "nodeType": "Return",
                        "src": "190166:115:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "c3746825",
                  "id": 7213,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolSharesRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7197,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "190115:8:0"
                  },
                  "parameters": {
                    "id": 7196,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7187,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "189950:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7186,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189950:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7189,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "189974:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7188,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189974:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7191,
                        "mutability": "mutable",
                        "name": "_staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "190007:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7190,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "190007:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7193,
                        "mutability": "mutable",
                        "name": "_stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "190032:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7192,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "190032:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7195,
                        "mutability": "mutable",
                        "name": "_liquidityAssetAmountRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "190062:37:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7194,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190062:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189940:165:0"
                  },
                  "returnParameters": {
                    "id": 7202,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7199,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "190138:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7198,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190138:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7201,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "190147:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7200,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190147:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "190137:18:0"
                  },
                  "scope": 7392,
                  "src": "189910:378:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3696
                  ],
                  "body": {
                    "id": 7224,
                    "nodeType": "Block",
                    "src": "190359:52:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          },
                          "id": 7222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7219,
                            "name": "poolState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5923,
                            "src": "190376:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7220,
                              "name": "State",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3237,
                              "src": "190389:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                "typeString": "type(enum IPool.State)"
                              }
                            },
                            "id": 7221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Finalized",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "190389:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "src": "190376:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 7218,
                        "id": 7223,
                        "nodeType": "Return",
                        "src": "190369:35:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "4f85221a",
                  "id": 7225,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isPoolFinalized",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7215,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "190330:8:0"
                  },
                  "parameters": {
                    "id": 7214,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "190318:2:0"
                  },
                  "returnParameters": {
                    "id": 7218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7217,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7225,
                        "src": "190353:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7216,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "190353:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "190352:6:0"
                  },
                  "scope": 7392,
                  "src": "190294:117:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 7243,
                    "nodeType": "Block",
                    "src": "190672:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7240,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "hexValue": "3130",
                                "id": 7238,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "190706:2:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                },
                                "value": "10"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "**",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 7239,
                                "name": "liquidityAssetDecimals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5902,
                                "src": "190712:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "190706:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7235,
                                  "name": "WAD",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5878,
                                  "src": "190697:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7233,
                                  "name": "amt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7228,
                                  "src": "190689:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 7234,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "190689:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7236,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "190689:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7237,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 808,
                            "src": "190689:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "190689:46:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7232,
                        "id": 7242,
                        "nodeType": "Return",
                        "src": "190682:53:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7226,
                    "nodeType": "StructuredDocumentation",
                    "src": "190511:95:0",
                    "text": "@dev   Converts to WAD precision.\n@param amt The amount to convert."
                  },
                  "id": 7244,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_toWad",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7229,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7228,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7244,
                        "src": "190627:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7227,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190627:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "190626:13:0"
                  },
                  "returnParameters": {
                    "id": 7232,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7231,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7244,
                        "src": "190663:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7230,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190663:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "190662:9:0"
                  },
                  "scope": 7392,
                  "src": "190611:131:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7255,
                    "nodeType": "Block",
                    "src": "190949:65:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7252,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "190991:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7250,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5885,
                              "src": "190966:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7251,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16,
                            "src": "190966:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 7253,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "190966:41:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7249,
                        "id": 7254,
                        "nodeType": "Return",
                        "src": "190959:48:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7245,
                    "nodeType": "StructuredDocumentation",
                    "src": "190748:127:0",
                    "text": "@dev    Returns the balance of this Pool's LiquidityLocker.\n@return The balance of LiquidityLocker."
                  },
                  "id": 7256,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_balanceOfLiquidityLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7246,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "190914:2:0"
                  },
                  "returnParameters": {
                    "id": 7249,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7248,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7256,
                        "src": "190940:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7247,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190940:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "190939:9:0"
                  },
                  "scope": 7392,
                  "src": "190880:134:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7269,
                    "nodeType": "Block",
                    "src": "191204:60:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              },
                              "id": 7265,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 7263,
                                "name": "poolState",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5923,
                                "src": "191222:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_State_$3237",
                                  "typeString": "enum IPool.State"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 7264,
                                "name": "_state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7259,
                                "src": "191235:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_State_$3237",
                                  "typeString": "enum IPool.State"
                                }
                              },
                              "src": "191222:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4241445f5354415445",
                              "id": 7266,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "191243:13:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_51cbbabed70c79a80a4b93853cd58aab5ca1d51219719f75e45421c1a1ef8f9a",
                                "typeString": "literal_string \"P:BAD_STATE\""
                              },
                              "value": "P:BAD_STATE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_51cbbabed70c79a80a4b93853cd58aab5ca1d51219719f75e45421c1a1ef8f9a",
                                "typeString": "literal_string \"P:BAD_STATE\""
                              }
                            ],
                            "id": 7262,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "191214:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "191214:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7268,
                        "nodeType": "ExpressionStatement",
                        "src": "191214:43:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7257,
                    "nodeType": "StructuredDocumentation",
                    "src": "191020:128:0",
                    "text": "@dev   Checks that the current state of Pool matches the provided state.\n@param _state A Pool state."
                  },
                  "id": 7270,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidState",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7260,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7259,
                        "mutability": "mutable",
                        "name": "_state",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7270,
                        "src": "191176:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$3237",
                          "typeString": "enum IPool.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 7258,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3237,
                          "src": "191176:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "191175:14:0"
                  },
                  "returnParameters": {
                    "id": 7261,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "191204:0:0"
                  },
                  "scope": 7392,
                  "src": "191153:111:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7282,
                    "nodeType": "Block",
                    "src": "191388:65:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 7278,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7275,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "191406:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7276,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "191406:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 7277,
                                "name": "poolDelegate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5888,
                                "src": "191420:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "191406:26:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4e4f545f44454c",
                              "id": 7279,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "191434:11:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3d98e7eddb8c5bf33a1584eca631dace9470fe7754001f896788b834171c2d89",
                                "typeString": "literal_string \"P:NOT_DEL\""
                              },
                              "value": "P:NOT_DEL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3d98e7eddb8c5bf33a1584eca631dace9470fe7754001f896788b834171c2d89",
                                "typeString": "literal_string \"P:NOT_DEL\""
                              }
                            ],
                            "id": 7274,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "191398:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "191398:48:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7281,
                        "nodeType": "ExpressionStatement",
                        "src": "191398:48:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7271,
                    "nodeType": "StructuredDocumentation",
                    "src": "191270:71:0",
                    "text": "@dev Checks that `msg.sender` is the Pool Delegate."
                  },
                  "id": 7283,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidDelegate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7272,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "191371:2:0"
                  },
                  "returnParameters": {
                    "id": 7273,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "191388:0:0"
                  },
                  "scope": 7392,
                  "src": "191346:107:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7299,
                    "nodeType": "Block",
                    "src": "191600:74:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7293,
                                      "name": "poolFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7286,
                                      "src": "191644:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 7292,
                                    "name": "IPoolFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3821,
                                    "src": "191631:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IPoolFactory_$3821_$",
                                      "typeString": "type(contract IPoolFactory)"
                                    }
                                  },
                                  "id": 7294,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "191631:25:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IPoolFactory_$3821",
                                    "typeString": "contract IPoolFactory"
                                  }
                                },
                                "id": 7295,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "globals",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3754,
                                "src": "191631:33:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function () view external returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 7296,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "191631:35:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            ],
                            "id": 7291,
                            "name": "IMapleGlobals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2870,
                            "src": "191617:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IMapleGlobals_$2870_$",
                              "typeString": "type(contract IMapleGlobals)"
                            }
                          },
                          "id": 7297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "191617:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "functionReturnParameters": 7290,
                        "id": 7298,
                        "nodeType": "Return",
                        "src": "191610:57:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7284,
                    "nodeType": "StructuredDocumentation",
                    "src": "191459:59:0",
                    "text": "@dev Returns the MapleGlobals instance."
                  },
                  "id": 7300,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_globals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7287,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7286,
                        "mutability": "mutable",
                        "name": "poolFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7300,
                        "src": "191541:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7285,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "191541:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "191540:21:0"
                  },
                  "returnParameters": {
                    "id": 7290,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7289,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7300,
                        "src": "191585:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 7288,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "191585:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "191584:15:0"
                  },
                  "scope": 7392,
                  "src": "191523:151:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7314,
                    "nodeType": "Block",
                    "src": "191856:107:0",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7305,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "191886:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7308,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "191911:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 7307,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "191903:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 7306,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "191903:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 7309,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "191903:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 7310,
                                "name": "_balanceOfLiquidityLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7256,
                                "src": "191928:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 7311,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "191928:27:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7304,
                            "name": "BalanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3270,
                            "src": "191871:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 7312,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "191871:85:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7313,
                        "nodeType": "EmitStatement",
                        "src": "191866:90:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7301,
                    "nodeType": "StructuredDocumentation",
                    "src": "191680:126:0",
                    "text": "@dev Emits a `BalanceUpdated` event for LiquidityLocker. \n@dev It emits a `BalanceUpdated` event. "
                  },
                  "id": 7315,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_emitBalanceUpdatedEvent",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7302,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "191844:2:0"
                  },
                  "returnParameters": {
                    "id": 7303,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "191856:0:0"
                  },
                  "scope": 7392,
                  "src": "191811:152:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7330,
                    "nodeType": "Block",
                    "src": "192287:55:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7326,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7318,
                              "src": "192325:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7327,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7320,
                              "src": "192329:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7323,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5885,
                              "src": "192297:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7325,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4601,
                            "src": "192297:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$77_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 7328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "192297:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7329,
                        "nodeType": "ExpressionStatement",
                        "src": "192297:38:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7316,
                    "nodeType": "StructuredDocumentation",
                    "src": "191969:244:0",
                    "text": "@dev   Transfers Liquidity Asset to given `to` address, from self (i.e. `address(this)`).\n@param to    The address to transfer liquidityAsset.\n@param value The amount of liquidity asset that gets transferred."
                  },
                  "id": 7331,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transferLiquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7318,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7331,
                        "src": "192251:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7317,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "192251:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7320,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7331,
                        "src": "192263:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7319,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "192263:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "192250:27:0"
                  },
                  "returnParameters": {
                    "id": 7322,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192287:0:0"
                  },
                  "scope": 7392,
                  "src": "192218:124:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7348,
                    "nodeType": "Block",
                    "src": "192493:100:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 7344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 7339,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7336,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "192511:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7337,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "192511:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 7338,
                                  "name": "poolDelegate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5888,
                                  "src": "192525:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "192511:26:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 7340,
                                  "name": "poolAdmins",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5940,
                                  "src": "192541:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                    "typeString": "mapping(address => bool)"
                                  }
                                },
                                "id": 7343,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7341,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "192552:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7342,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "192552:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "192541:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "192511:52:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4e4f545f44454c5f4f525f41444d494e",
                              "id": 7345,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "192565:20:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_d5ae77588d74821fccda162c37b54aa9242317fd4a54a64f95d51f0dde9feabe",
                                "typeString": "literal_string \"P:NOT_DEL_OR_ADMIN\""
                              },
                              "value": "P:NOT_DEL_OR_ADMIN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_d5ae77588d74821fccda162c37b54aa9242317fd4a54a64f95d51f0dde9feabe",
                                "typeString": "literal_string \"P:NOT_DEL_OR_ADMIN\""
                              }
                            ],
                            "id": 7335,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "192503:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "192503:83:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7347,
                        "nodeType": "ExpressionStatement",
                        "src": "192503:83:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7332,
                    "nodeType": "StructuredDocumentation",
                    "src": "192348:87:0",
                    "text": "@dev Checks that `msg.sender` is the Pool Delegate or a Pool Admin."
                  },
                  "id": 7349,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidDelegateOrPoolAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7333,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192476:2:0"
                  },
                  "returnParameters": {
                    "id": 7334,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192493:0:0"
                  },
                  "scope": 7392,
                  "src": "192440:153:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7363,
                    "nodeType": "Block",
                    "src": "192727:84:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7359,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "192745:40:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 7355,
                                        "name": "superFactory",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5900,
                                        "src": "192755:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 7354,
                                      "name": "_globals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7300,
                                      "src": "192746:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                        "typeString": "function (address) view returns (contract IMapleGlobals)"
                                      }
                                    },
                                    "id": 7356,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "192746:22:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  "id": 7357,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "protocolPaused",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2569,
                                  "src": "192746:37:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                                    "typeString": "function () view external returns (bool)"
                                  }
                                },
                                "id": 7358,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "192746:39:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a50524f544f5f504155534544",
                              "id": 7360,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "192787:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e82cfe487ceb95d02498cab97f189f4a04df24267b7d64872770659e68f5c819",
                                "typeString": "literal_string \"P:PROTO_PAUSED\""
                              },
                              "value": "P:PROTO_PAUSED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e82cfe487ceb95d02498cab97f189f4a04df24267b7d64872770659e68f5c819",
                                "typeString": "literal_string \"P:PROTO_PAUSED\""
                              }
                            ],
                            "id": 7353,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "192737:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "192737:67:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7362,
                        "nodeType": "ExpressionStatement",
                        "src": "192737:67:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7350,
                    "nodeType": "StructuredDocumentation",
                    "src": "192599:75:0",
                    "text": "@dev Checks that the protocol is not in a paused state."
                  },
                  "id": 7364,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_whenProtocolNotPaused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7351,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192710:2:0"
                  },
                  "returnParameters": {
                    "id": 7352,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192727:0:0"
                  },
                  "scope": 7392,
                  "src": "192679:132:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7374,
                    "nodeType": "Block",
                    "src": "193002:69:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 7368,
                            "name": "_isValidDelegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7283,
                            "src": "193012:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 7369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "193012:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7370,
                        "nodeType": "ExpressionStatement",
                        "src": "193012:18:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 7371,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "193040:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 7372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "193040:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7373,
                        "nodeType": "ExpressionStatement",
                        "src": "193040:24:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7365,
                    "nodeType": "StructuredDocumentation",
                    "src": "192817:118:0",
                    "text": "@dev Checks that `msg.sender` is the Pool Delegate and that the protocol is not in a paused state."
                  },
                  "id": 7375,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidDelegateAndProtocolNotPaused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7366,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192985:2:0"
                  },
                  "returnParameters": {
                    "id": 7367,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "193002:0:0"
                  },
                  "scope": 7392,
                  "src": "192940:131:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7390,
                    "nodeType": "Block",
                    "src": "193152:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7386,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7377,
                              "src": "193205:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7387,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7379,
                              "src": "193209:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7383,
                                  "name": "liquidityLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5891,
                                  "src": "193179:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7382,
                                "name": "ILiquidityLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2902,
                                "src": "193162:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ILiquidityLocker_$2902_$",
                                  "typeString": "type(contract ILiquidityLocker)"
                                }
                              },
                              "id": 7384,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "193162:33:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILiquidityLocker_$2902",
                                "typeString": "contract ILiquidityLocker"
                              }
                            },
                            "id": 7385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2891,
                            "src": "193162:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 7388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "193162:53:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7389,
                        "nodeType": "ExpressionStatement",
                        "src": "193162:53:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 7391,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transferLiquidityLockerFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7380,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7377,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7391,
                        "src": "193116:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7376,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "193116:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7379,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7391,
                        "src": "193128:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7378,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "193128:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "193115:27:0"
                  },
                  "returnParameters": {
                    "id": 7381,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "193152:0:0"
                  },
                  "scope": 7392,
                  "src": "193077:145:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7393,
              "src": "171993:21232:0"
            }
          ],
          "src": "108:193118:0"
        },
        "id": 0
      }
    }
  }
}
