ETH Price: $1,537.82 (-4.86%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Eth217734442025-02-04 13:30:2365 days ago1738675823IN
0xa5DF70A7...CfdE5EA10
0 ETH0.000422573.09726296
Deposit Eth214216452024-12-17 10:25:47114 days ago1734431147IN
0xa5DF70A7...CfdE5EA10
3.6 ETH0.001400079.89930677
Deposit Eth213447302024-12-06 16:44:35125 days ago1733503475IN
0xa5DF70A7...CfdE5EA10
3 ETH0.0048770134.48310689
Propose Owner205002152024-08-10 19:10:23243 days ago1723317023IN
0xa5DF70A7...CfdE5EA10
0 ETH0.000049251.0114482
Set Liquidations...205000982024-08-10 18:46:59243 days ago1723315619IN
0xa5DF70A7...CfdE5EA10
0 ETH0.000168785
Claim Ownership205000542024-08-10 18:38:11243 days ago1723315091IN
0xa5DF70A7...CfdE5EA10
0 ETH0.000023730.80903629
Deposit Eth198608152024-05-13 11:31:59332 days ago1715599919IN
0xa5DF70A7...CfdE5EA10
6 ETH0.000449953.28442999
Deposit Eth198163232024-05-07 6:12:47338 days ago1715062367IN
0xa5DF70A7...CfdE5EA10
11.4 ETH0.00093376.60180975
Withdraw Eth192341282024-02-15 15:09:23420 days ago1708009763IN
0xa5DF70A7...CfdE5EA10
0 ETH0.0123962490.86693675
Propose Owner192199032024-02-13 15:14:47422 days ago1707837287IN
0xa5DF70A7...CfdE5EA10
0 ETH0.00226146.42730211
Set Liquidations...192197802024-02-13 14:49:11422 days ago1707835751IN
0xa5DF70A7...CfdE5EA10
0 ETH0.0015016444.46801283
Claim Ownership192197132024-02-13 14:35:35422 days ago1707834935IN
0xa5DF70A7...CfdE5EA10
0 ETH0.0018793864.04885419
Deposit Eth189837742024-01-11 12:46:35455 days ago1704977195IN
0xa5DF70A7...CfdE5EA10
40.7 ETH0.008658128.75787908
Propose Owner189801922024-01-11 0:42:59456 days ago1704933779IN
0xa5DF70A7...CfdE5EA10
0 ETH0.0022531546.26593522
Add Whitelisted ...189799552024-01-10 23:55:11456 days ago1704930911IN
0xa5DF70A7...CfdE5EA10
0 ETH0.0026351452.5033239
Set Loans Periph...189799502024-01-10 23:54:11456 days ago1704930851IN
0xa5DF70A7...CfdE5EA10
0 ETH0.0016943950.21010563
Claim Ownership189799072024-01-10 23:45:35456 days ago1704930335IN
0xa5DF70A7...CfdE5EA10
0 ETH0.0016261555.41884357
Deposit Eth187982022023-12-16 11:02:35481 days ago1702724555IN
0xa5DF70A7...CfdE5EA10
15.2 ETH0.0076040638.88175217
Deposit Eth187191522023-12-05 9:07:59492 days ago1701767279IN
0xa5DF70A7...CfdE5EA10
6.75 ETH0.0089310347
Deposit Eth186973582023-12-02 7:54:59495 days ago1701503699IN
0xa5DF70A7...CfdE5EA10
6.25 ETH0.0048086834
Deposit Eth185652952023-11-13 20:14:47514 days ago1699906487IN
0xa5DF70A7...CfdE5EA10
19 ETH0.009879872.11800495
Deposit Eth185647532023-11-13 18:25:23514 days ago1699899923IN
0xa5DF70A7...CfdE5EA10
25.5 ETH0.0073977354
Deposit Eth185339252023-11-09 10:55:23518 days ago1699527323IN
0xa5DF70A7...CfdE5EA10
8.5 ETH0.0053315337.69681197
Deposit Eth184357522023-10-26 17:02:59532 days ago1698339779IN
0xa5DF70A7...CfdE5EA10
7 ETH0.0039600928
Deposit Eth182780642023-10-04 15:31:23554 days ago1696433483IN
0xa5DF70A7...CfdE5EA10
53.5 ETH0.0026664418.85319747
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Deposit222420192025-04-11 0:09:472 hrs ago1744330187
0xa5DF70A7...CfdE5EA10
3.79129367 ETH
Receive Funds Et...222420192025-04-11 0:09:472 hrs ago1744330187
0xa5DF70A7...CfdE5EA10
3.79129367 ETH
Transfer217734442025-02-04 13:30:2365 days ago1738675823
0xa5DF70A7...CfdE5EA10
40 ETH
Transfer217734442025-02-04 13:30:2365 days ago1738675823
0xa5DF70A7...CfdE5EA10
40 ETH
Deposit217729092025-02-04 11:42:4765 days ago1738669367
0xa5DF70A7...CfdE5EA10
30.74100157 ETH
Receive Funds Et...217729092025-02-04 11:42:4765 days ago1738669367
0xa5DF70A7...CfdE5EA10
30.74100157 ETH
Transfer214778162024-12-25 6:52:23106 days ago1735109543
0xa5DF70A7...CfdE5EA10
7.5 ETH
Transfer214778162024-12-25 6:52:23106 days ago1735109543
0xa5DF70A7...CfdE5EA10
7.5 ETH
Deposit214778142024-12-25 6:51:59106 days ago1735109519
0xa5DF70A7...CfdE5EA10
8.625 ETH
Receive Funds Fr...214778142024-12-25 6:51:59106 days ago1735109519
0xa5DF70A7...CfdE5EA10
8.625 ETH
Transfer214778122024-12-25 6:51:35106 days ago1735109495
0xa5DF70A7...CfdE5EA10
7.5 ETH
Transfer214778122024-12-25 6:51:35106 days ago1735109495
0xa5DF70A7...CfdE5EA10
7.5 ETH
Deposit214778102024-12-25 6:51:11106 days ago1735109471
0xa5DF70A7...CfdE5EA10
8.625 ETH
Receive Funds Fr...214778102024-12-25 6:51:11106 days ago1735109471
0xa5DF70A7...CfdE5EA10
8.625 ETH
Transfer214778082024-12-25 6:50:47106 days ago1735109447
0xa5DF70A7...CfdE5EA10
7.7 ETH
Transfer214778082024-12-25 6:50:47106 days ago1735109447
0xa5DF70A7...CfdE5EA10
7.7 ETH
Deposit214778062024-12-25 6:50:23106 days ago1735109423
0xa5DF70A7...CfdE5EA10
8.855 ETH
Receive Funds Fr...214778062024-12-25 6:50:23106 days ago1735109423
0xa5DF70A7...CfdE5EA10
8.855 ETH
Transfer214778042024-12-25 6:49:59106 days ago1735109399
0xa5DF70A7...CfdE5EA10
9 ETH
Transfer214778042024-12-25 6:49:59106 days ago1735109399
0xa5DF70A7...CfdE5EA10
9 ETH
Deposit214778022024-12-25 6:49:35106 days ago1735109375
0xa5DF70A7...CfdE5EA10
10.325 ETH
Receive Funds Fr...214778022024-12-25 6:49:35106 days ago1735109375
0xa5DF70A7...CfdE5EA10
10.325 ETH
Transfer214778002024-12-25 6:49:11106 days ago1735109351
0xa5DF70A7...CfdE5EA10
13 ETH
Transfer214778002024-12-25 6:49:11106 days ago1735109351
0xa5DF70A7...CfdE5EA10
13 ETH
Deposit214777972024-12-25 6:48:35106 days ago1735109315
0xa5DF70A7...CfdE5EA10
14.825 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LendingPoolPeripheral

Compiler Version
vyper:0.3.7

Optimization Enabled:
N/A

Other Settings:
paris EvmVersion, None license

Contract Source Code (Vyper language format)

# @version 0.3.7

"""
@title LendingPoolPeripheral
@author [Zharta](https://zharta.io/)
@notice The lending pool contract implements the lending pool logic. Each instance works with a corresponding loans contract to implement an isolated lending market.
@dev Uses a `LendingPoolCore` contract to store state
"""

# Interfaces

from vyper.interfaces import ERC20 as IERC20

interface ILendingPoolCore:
    def funds(arg0: address) -> InvestorFunds: view
    def fundsAvailable() -> uint256: view
    def fundsInvested() -> uint256: view
    def computeWithdrawableAmount(_lender: address) -> uint256: view
    def deposit(_lender: address, _payer: address, _amount: uint256) -> bool: nonpayable
    def withdraw(_lender: address, _wallet: address, _amount: uint256) -> bool: nonpayable
    def sendFunds(_to: address, _amount: uint256) -> bool: nonpayable
    def receiveFunds(_borrower: address, _amount: uint256, _rewardsAmount: uint256, _investedAmount: uint256) -> bool: nonpayable
    def transferProtocolFees(_borrower: address, _protocolWallet: address, _amount: uint256) -> bool: nonpayable

interface ILendingPoolLock:
    def investorLocks(arg0: address) -> InvestorLock: view
    def setInvestorLock(_lender: address, _amount: uint256, _lockPeriodEnd: uint256): nonpayable

interface ILiquidityControls:
    def lockPeriodDuration() -> uint256: view
    def lockPeriodEnabled() -> bool: view
    def withinPoolShareLimit(
        _lender: address,
        _amount: uint256,
        _lpPeripheralContractAddress: address,
        _lpCoreContractAddress: address,
        _fundsInvestable: uint256
    ) -> bool: view
    def outOfLockPeriod(_lender: address, _remainingAmount: uint256, _lpLockContractAddress: address) -> bool: view

interface IWETH:
    def deposit(): payable
    def withdraw(_amount: uint256): nonpayable

# Structs

struct InvestorFunds:
    currentAmountDeposited: uint256
    totalAmountDeposited: uint256
    totalAmountWithdrawn: uint256
    sharesBasisPoints: uint256
    activeForRewards: bool

struct InvestorLock:
    lockPeriodEnd: uint256
    lockPeriodAmount: uint256

# Events

event OwnerProposed:
    ownerIndexed: indexed(address)
    proposedOwnerIndexed: indexed(address)
    owner: address
    proposedOwner: address
    erc20TokenContract: address

event OwnershipTransferred:
    ownerIndexed: indexed(address)
    proposedOwnerIndexed: indexed(address)
    owner: address
    proposedOwner: address
    erc20TokenContract: address

event MaxCapitalEfficiencyChanged:
    erc20TokenContractIndexed: indexed(address)
    currentValue: uint256
    newValue: uint256
    erc20TokenContract: address

event ProtocolWalletChanged:
    erc20TokenContractIndexed: indexed(address)
    currentValue: address
    newValue: address
    erc20TokenContract: address

event ProtocolFeesShareChanged:
    erc20TokenContractIndexed: indexed(address)
    currentValue: uint256
    newValue: uint256
    erc20TokenContract: address

event LoansPeripheralAddressSet:
    erc20TokenContractIndexed: indexed(address)
    currentValue: address
    newValue: address
    erc20TokenContract: address

event LiquidationsPeripheralAddressSet:
    erc20TokenContractIndexed: indexed(address)
    currentValue: address
    newValue: address
    erc20TokenContract: address

event LiquidityControlsAddressSet:
    erc20TokenContractIndexed: indexed(address)
    currentValue: address
    newValue: address
    erc20TokenContract: address

event WhitelistStatusChanged:
    erc20TokenContractIndexed: indexed(address)
    value: bool
    erc20TokenContract: address

event WhitelistAddressAdded:
    erc20TokenContractIndexed: indexed(address)
    value: address
    erc20TokenContract: address

event WhitelistAddressRemoved:
    erc20TokenContractIndexed: indexed(address)
    value: address
    erc20TokenContract: address

event ContractStatusChanged:
    erc20TokenContractIndexed: indexed(address)
    value: bool
    erc20TokenContract: address

event InvestingStatusChanged:
    erc20TokenContractIndexed: indexed(address)
    value: bool
    erc20TokenContract: address

event ContractDeprecated:
    erc20TokenContractIndexed: indexed(address)
    erc20TokenContract: address

event Deposit:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256
    erc20TokenContract: address

event Withdrawal:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256
    erc20TokenContract: address

event FundsTransfer:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256
    erc20TokenContract: address

event FundsReceipt:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256
    rewardsPool: uint256
    rewardsProtocol: uint256
    investedAmount: uint256
    erc20TokenContract: address
    fundsOrigin: String[30]

event PaymentSent:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256

event PaymentReceived:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256


# Global variables

owner: public(address)
proposedOwner: public(address)

loansContract: public(address)
lendingPoolCoreContract: public(address)
lendingPoolLockContract: public(address)
erc20TokenContract: public(immutable(address))
liquidationsPeripheralContract: public(address)
liquidityControlsContract: public(address)

protocolWallet: public(address)
protocolFeesShare: public(uint256) # parts per 10000, e.g. 2.5% is represented by 250 parts per 10000

maxCapitalEfficienty: public(uint256) # parts per 10000, e.g. 2.5% is represented by 250 parts per 10000
isPoolActive: public(bool)
isPoolDeprecated: public(bool)
isPoolInvesting: public(bool)

whitelistEnabled: public(bool)
whitelistedAddresses: public(HashMap[address, bool])


##### INTERNAL METHODS - VIEW #####

@view
@internal
def _fundsAreAllowed(_owner: address, _spender: address, _amount: uint256) -> bool:
    amountAllowed: uint256 = IERC20(erc20TokenContract).allowance(_owner, _spender)
    return _amount <= amountAllowed


@pure
@internal
def _poolHasFundsToInvest(_fundsAvailable: uint256, _fundsInvested: uint256, _capitalEfficienty: uint256) -> bool:
    if _fundsAvailable + _fundsInvested == 0:
        return False
    
    return _fundsInvested * 10000 / (_fundsAvailable + _fundsInvested) < _capitalEfficienty


@view
@internal
def _poolHasFundsToInvestAfterDeposit(_amount: uint256) -> bool:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable() + _amount
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested()

    return self._poolHasFundsToInvest(fundsAvailable, fundsInvested, self.maxCapitalEfficienty)


@view
@internal
def _poolHasFundsToInvestAfterPayment(_amount: uint256, _rewards: uint256) -> bool:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable() + _amount + _rewards
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested() - _amount

    return self._poolHasFundsToInvest(fundsAvailable, fundsInvested, self.maxCapitalEfficienty)


@view
@internal
def _poolHasFundsToInvestAfterWithdraw(_amount: uint256) -> bool:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable() - _amount
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested()
    
    return self._poolHasFundsToInvest(fundsAvailable, fundsInvested, self.maxCapitalEfficienty)


@view
@internal
def _poolHasFundsToInvestAfterInvestment(_amount: uint256) -> bool:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable() - _amount
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested() + _amount
    
    return self._poolHasFundsToInvest(fundsAvailable, fundsInvested, self.maxCapitalEfficienty)


@view
@internal
def _maxFundsInvestable() -> uint256:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable()
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested()

    fundsBuffer: uint256 = (fundsAvailable + fundsInvested) * (10000 - self.maxCapitalEfficienty) / 10000

    if fundsBuffer > fundsAvailable:
        return 0
    
    return fundsAvailable - fundsBuffer


@view
@internal
def _theoreticalMaxFundsInvestable(_amount: uint256) -> uint256:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable()
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested()

    return (fundsAvailable + fundsInvested + _amount) * self.maxCapitalEfficienty / 10000


@view
@internal
def _computeLockPeriodEnd(_lender: address) -> uint256:
    lockPeriodEnd: uint256 = ILendingPoolLock(self.lendingPoolLockContract).investorLocks(_lender).lockPeriodEnd
    if lockPeriodEnd <= block.timestamp:
        lockPeriodEnd = block.timestamp + ILiquidityControls(self.liquidityControlsContract).lockPeriodDuration()
    return lockPeriodEnd


@view
@internal
def _computeLockPeriod(_lender: address, _amount: uint256) -> (uint256, uint256):
    investorLock: InvestorLock = ILendingPoolLock(self.lendingPoolLockContract).investorLocks(msg.sender)
    if investorLock.lockPeriodEnd <= block.timestamp:
        return block.timestamp + ILiquidityControls(self.liquidityControlsContract).lockPeriodDuration(), _amount
    else:
        return investorLock.lockPeriodEnd, investorLock.lockPeriodAmount + _amount

##### INTERNAL METHODS - WRITE #####


@internal
def _deposit(_amount: uint256, _payer: address):
    assert not self.isPoolDeprecated, "pool is deprecated, withdraw"
    assert self.isPoolActive, "pool is not active right now"
    assert _amount > 0, "_amount has to be higher than 0"

    assert ILiquidityControls(self.liquidityControlsContract).withinPoolShareLimit(
        msg.sender,
        _amount,
        self,
        self.lendingPoolCoreContract,
        self._theoreticalMaxFundsInvestable(_amount)
    ), "max pool share surpassed"

    if self.whitelistEnabled and not self.whitelistedAddresses[msg.sender]:
        raise "msg.sender is not whitelisted"

    if not self.isPoolInvesting and self._poolHasFundsToInvestAfterDeposit(_amount):
        self.isPoolInvesting = True

        log InvestingStatusChanged(
            erc20TokenContract,
            True,
            erc20TokenContract
        )

    lockPeriodEnd: uint256 = 0
    lockPeriodAmount: uint256 = 0
    lockPeriodEnd, lockPeriodAmount = self._computeLockPeriod(msg.sender, _amount)

    if not ILendingPoolCore(self.lendingPoolCoreContract).deposit(msg.sender, _payer, _amount):
        raise "error creating deposit"

    ILendingPoolLock(self.lendingPoolLockContract).setInvestorLock(msg.sender, lockPeriodAmount, lockPeriodEnd)

    log Deposit(msg.sender, msg.sender, _amount, erc20TokenContract)


@internal
def _withdraw(_amount: uint256, _receiver: address):
    assert _amount > 0, "_amount has to be higher than 0"
    
    withdrawableAmount: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).computeWithdrawableAmount(msg.sender)
    assert withdrawableAmount >= _amount, "_amount more than withdrawable"
    assert ILiquidityControls(self.liquidityControlsContract).outOfLockPeriod(msg.sender, withdrawableAmount - _amount, self.lendingPoolLockContract), "withdraw within lock period"
    assert ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable() >= _amount, "available funds less than amount"

    if self.isPoolInvesting and not self._poolHasFundsToInvestAfterWithdraw(_amount):
        self.isPoolInvesting = False

        log InvestingStatusChanged(
            erc20TokenContract,
            False,
            erc20TokenContract
        )

    if not ILendingPoolCore(self.lendingPoolCoreContract).withdraw(msg.sender, _receiver, _amount):
        raise "error withdrawing funds"

    log Withdrawal(msg.sender, msg.sender, _amount, erc20TokenContract)


@internal
def _sendFunds(_to: address, _receiver: address, _amount: uint256):
    assert not self.isPoolDeprecated, "pool is deprecated"
    assert self.isPoolActive, "pool is inactive"
    assert self.isPoolInvesting, "max capital eff reached"
    assert msg.sender == self.loansContract, "msg.sender is not the loans addr"
    assert _to != empty(address), "_to is the zero address"
    assert _amount > 0, "_amount has to be higher than 0"
    assert _amount <= self._maxFundsInvestable(), "insufficient liquidity"

    if self.isPoolInvesting and not self._poolHasFundsToInvestAfterInvestment(_amount):
        self.isPoolInvesting = False

        log InvestingStatusChanged(
            erc20TokenContract,
            False,
            erc20TokenContract
        )

    if not ILendingPoolCore(self.lendingPoolCoreContract).sendFunds(_receiver, _amount):
        raise "error sending funds in LPCore"

    log FundsTransfer(_to, _to, _amount, erc20TokenContract)


@internal
def _receiveFunds(_borrower: address, _payer: address, _amount: uint256, _rewardsAmount: uint256):
    assert msg.sender == self.loansContract, "msg.sender is not the loans addr"
    assert _borrower != empty(address), "_borrower is the zero address"
    assert _amount + _rewardsAmount > 0, "amount should be higher than 0"

    rewardsProtocol: uint256 = _rewardsAmount * self.protocolFeesShare / 10000
    rewardsPool: uint256 = _rewardsAmount - rewardsProtocol

    self._transferReceivedFunds(_borrower, _payer, _amount, rewardsPool, rewardsProtocol, _amount, "loan")


@internal
def _transferReceivedFunds(
    _borrower: address,
    _payer: address,
    _amount: uint256,
    _rewardsPool: uint256,
    _rewardsProtocol: uint256,
    _investedAmount: uint256,
    _origin: String[30]
):
    if not self.isPoolInvesting and self._poolHasFundsToInvestAfterPayment(_amount, _rewardsPool):
        self.isPoolInvesting = True

        log InvestingStatusChanged(
            erc20TokenContract,
            True,
            erc20TokenContract
        )

    if not ILendingPoolCore(self.lendingPoolCoreContract).receiveFunds(_payer, _amount, _rewardsPool, _investedAmount):
        raise "error receiving funds in LPCore"
    
    if _rewardsProtocol > 0:
        if not ILendingPoolCore(self.lendingPoolCoreContract).transferProtocolFees(_payer, self.protocolWallet, _rewardsProtocol):
            raise "error transferring protocol fees"

    log FundsReceipt(
        _borrower,
        _borrower,
        _amount,
        _rewardsPool,
        _rewardsProtocol,
        _investedAmount,
        erc20TokenContract,
        _origin
    )


@internal
def _receiveFundsFromLiquidation(
    _borrower: address,
    _payer: address,
    _amount: uint256,
    _rewardsAmount: uint256,
    _distributeToProtocol: bool,
    _investedAmount: uint256,
    _origin: String[30]
):
    assert msg.sender == self.liquidationsPeripheralContract, "msg.sender is not the BN addr"
    assert _borrower != empty(address), "_borrower is the zero address"
    assert _amount + _rewardsAmount > 0, "amount should be higher than 0"

    rewardsProtocol: uint256 = 0
    rewardsPool: uint256 = 0
    if _distributeToProtocol:
        rewardsProtocol = _rewardsAmount * self.protocolFeesShare / 10000
        rewardsPool = _rewardsAmount - rewardsProtocol
    else:
        rewardsPool = _rewardsAmount

    self._transferReceivedFunds(_borrower, _payer, _amount, rewardsPool, rewardsProtocol, _investedAmount, _origin)


@internal
def _unwrap_and_send(_to: address, _amount: uint256):
    IWETH(erc20TokenContract).withdraw(_amount)
    send(_to, _amount)
    log PaymentSent(_to, _to, _amount)


@internal
def _wrap_and_approve(_to: address, _amount: uint256):
    IWETH(erc20TokenContract).deposit(value=_amount)
    log PaymentSent(erc20TokenContract, erc20TokenContract, _amount)
    IERC20(erc20TokenContract).approve(_to, _amount)


##### EXTERNAL METHODS - VIEW #####

@view
@external
def maxFundsInvestable() -> uint256:
    return self._maxFundsInvestable()


@view
@external
def theoreticalMaxFundsInvestable() -> uint256:
    return self._theoreticalMaxFundsInvestable(0)


@view
@external
def theoreticalMaxFundsInvestableAfterDeposit(_amount: uint256) -> uint256:
    return self._theoreticalMaxFundsInvestable(_amount)


@view
@external
def lenderFunds(_lender: address) -> InvestorFunds:
    return ILendingPoolCore(self.lendingPoolCoreContract).funds(_lender)

@view
@external
def lockedAmount(_lender: address) -> uint256:
    if not ILiquidityControls(self.liquidityControlsContract).lockPeriodEnabled():
        return 0

    lockPeriod: InvestorLock = ILendingPoolLock(self.lendingPoolLockContract).investorLocks(_lender)
    if lockPeriod.lockPeriodEnd < block.timestamp:
        return 0
    return lockPeriod.lockPeriodAmount


##### EXTERNAL METHODS - NON-VIEW #####

@external
def __init__(
    _lendingPoolCoreContract: address,
    _lendingPoolLockContract: address,
    _erc20TokenContract: address,
    _protocolWallet: address,
    _protocolFeesShare: uint256,
    _maxCapitalEfficienty: uint256,
    _whitelistEnabled: bool
):
    assert _lendingPoolCoreContract != empty(address), "address is the zero address"
    assert _erc20TokenContract != empty(address), "address is the zero address"
    assert _protocolWallet != empty(address), "address is the zero address"
    assert _protocolFeesShare <= 10000, "fees share exceeds 10000 bps"
    assert _maxCapitalEfficienty <= 10000, "capital eff exceeds 10000 bps"

    self.owner = msg.sender
    self.lendingPoolCoreContract = _lendingPoolCoreContract
    self.lendingPoolLockContract = _lendingPoolLockContract
    erc20TokenContract = _erc20TokenContract
    self.protocolWallet = _protocolWallet
    self.protocolFeesShare = _protocolFeesShare
    self.maxCapitalEfficienty = _maxCapitalEfficienty
    self.isPoolActive = True
    
    if _whitelistEnabled:
        self.whitelistEnabled = _whitelistEnabled


@external
@payable
def __default__():
    assert msg.sender == erc20TokenContract, "msg.sender is not the WETH addr"
    log PaymentReceived(msg.sender, msg.sender, msg.value)


@external
def proposeOwner(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address it the zero address"
    assert self.owner != _address, "proposed owner addr is the owner"
    assert self.proposedOwner != _address, "proposed owner addr is the same"

    self.proposedOwner = _address

    log OwnerProposed(
        self.owner,
        _address,
        self.owner,
        _address,
        erc20TokenContract
    )


@external
def claimOwnership():
    assert msg.sender == self.proposedOwner, "msg.sender is not the proposed"

    log OwnershipTransferred(
        self.owner,
        self.proposedOwner,
        self.owner,
        self.proposedOwner,
        erc20TokenContract
    )

    self.owner = self.proposedOwner
    self.proposedOwner = empty(address)


@external
def changeMaxCapitalEfficiency(_value: uint256):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _value <= 10000, "capital eff exceeds 10000 bps"
    assert _value != self.maxCapitalEfficienty, "new value is the same"

    log MaxCapitalEfficiencyChanged(
        erc20TokenContract,
        self.maxCapitalEfficienty,
        _value,
        erc20TokenContract
    )

    self.maxCapitalEfficienty = _value


@external
def changeProtocolWallet(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert _address != self.protocolWallet, "new value is the same"

    log ProtocolWalletChanged(
        erc20TokenContract,
        self.protocolWallet,
        _address,
        erc20TokenContract
    )

    self.protocolWallet = _address


@external
def changeProtocolFeesShare(_value: uint256):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _value <= 10000, "fees share exceeds 10000 bps"
    assert _value != self.protocolFeesShare, "new value is the same"

    log ProtocolFeesShareChanged(
        erc20TokenContract,
        self.protocolFeesShare,
        _value,
        erc20TokenContract
    )

    self.protocolFeesShare = _value


@external
def setLoansPeripheralAddress(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert _address.is_contract, "_address is not a contract"
    assert _address != self.loansContract, "new value is the same"

    log LoansPeripheralAddressSet(
        erc20TokenContract,
        self.loansContract,
        _address,
        erc20TokenContract
    )

    self.loansContract = _address


@external
def setLiquidationsPeripheralAddress(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert _address.is_contract, "_address is not a contract"
    assert _address != self.liquidationsPeripheralContract, "new value is the same"

    log LiquidationsPeripheralAddressSet(
        erc20TokenContract,
        self.liquidationsPeripheralContract,
        _address,
        erc20TokenContract
    )

    self.liquidationsPeripheralContract = _address


@external
def setLiquidityControlsAddress(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert _address.is_contract, "_address is not a contract"
    assert _address != self.liquidityControlsContract, "new value is the same"

    log LiquidityControlsAddressSet(
        erc20TokenContract,
        self.liquidityControlsContract,
        _address,
        erc20TokenContract
    )

    self.liquidityControlsContract = _address


@external
def changeWhitelistStatus(_flag: bool):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert self.whitelistEnabled != _flag, "new value is the same"

    self.whitelistEnabled = _flag

    log WhitelistStatusChanged(
        erc20TokenContract,
        _flag,
        erc20TokenContract
    )


@external
def addWhitelistedAddress(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert self.whitelistEnabled, "whitelist is disabled"
    assert not self.whitelistedAddresses[_address], "address is already whitelisted"

    self.whitelistedAddresses[_address] = True

    log WhitelistAddressAdded(
        erc20TokenContract,
        _address,
        erc20TokenContract
    )


@external
def removeWhitelistedAddress(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert self.whitelistEnabled, "whitelist is disabled"
    assert self.whitelistedAddresses[_address], "address is not whitelisted"

    self.whitelistedAddresses[_address] = False

    log WhitelistAddressRemoved(
        erc20TokenContract,
        _address,
        erc20TokenContract
    )


@external
def changePoolStatus(_flag: bool):
    assert msg.sender == self.owner, "msg.sender is not the owner"

    self.isPoolActive = _flag
  
    if not _flag:
        self.isPoolInvesting = False

        log InvestingStatusChanged(
            erc20TokenContract,
            False,
            erc20TokenContract
        )

    if _flag and not self.isPoolInvesting and self._poolHasFundsToInvestAfterWithdraw(0):
        self.isPoolInvesting = True

        log InvestingStatusChanged(
            erc20TokenContract,
            True,
            erc20TokenContract
        )

    log ContractStatusChanged(
        erc20TokenContract,
        _flag,
        erc20TokenContract
    )


@external
def deprecate():
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert not self.isPoolDeprecated, "pool is already deprecated"

    self.isPoolDeprecated = True
    self.isPoolActive = False
    self.isPoolInvesting = False

    log ContractStatusChanged(
        erc20TokenContract,
        False,
        erc20TokenContract
    )

    log InvestingStatusChanged(
        erc20TokenContract,
        False,
        erc20TokenContract
    )

    log ContractDeprecated(
        erc20TokenContract,
        erc20TokenContract
    )


@external
def deposit(_amount: uint256):

    """
    @notice Deposits the given amount of the ERC20 in the lending pool
    @dev Logs the `Deposit` event
    @param _amount Value to deposit
    """

    assert self._fundsAreAllowed(msg.sender, self.lendingPoolCoreContract, _amount), "not enough funds allowed"
    self._deposit(_amount, msg.sender)



@external
@payable
def depositEth():

    """
    @notice Deposits the sent amount in the lending pool
    @dev Logs the `Deposit` event
    """

    log PaymentReceived(msg.sender, msg.sender, msg.value)

    self._wrap_and_approve(self.lendingPoolCoreContract, msg.value)
    self._deposit(msg.value, self)


@external
def withdraw(_amount: uint256):
    """
    @notice Withdrawals the given amount of ERC20 from the lending pool
    @dev Logs the `Withdrawal` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _amount Value to withdraw
    """
    self._withdraw(_amount, msg.sender)


@external
def withdrawEth(_amount: uint256):
    """
    @notice Withdrawals the given amount of ETH from the lending pool
    @dev Logs the `Withdrawal` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _amount Value to withdraw in wei
    """
    self._withdraw(_amount, self)
    self._unwrap_and_send(msg.sender, _amount)



@external
def sendFunds(_to: address, _amount: uint256):
    """
    @notice Sends funds in the pool ERC20 to a borrower as part of a loan creation
    @dev Logs the `FundsTransfer` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _to The wallet address to transfer the funds to
    @param _amount Value to transfer
    """

    self._sendFunds(_to, _to, _amount)


@external
def sendFundsEth(_to: address, _amount: uint256):
    """
    @notice Sends funds in ETH to a borrower as part of a loan creation
    @dev Logs the `FundsTransfer` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _to The wallet address to transfer the funds to
    @param _amount Value to transfer in wei
    """

    self._sendFunds(_to, self, _amount)
    self._unwrap_and_send(_to, _amount)


@payable
@external
def receiveFundsEth(_borrower: address, _amount: uint256, _rewardsAmount: uint256):

    """
    @notice Receive funds in ETH from a borrower as part of a loan payment
    @dev Logs the `FundsReceipt` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _borrower The wallet address to receive the funds from
    @param _amount Value of the loans principal to receive in wei
    @param _rewardsAmount Value of the loans interest (including the protocol fee share) to receive in wei
    """

    _received_amount: uint256 = msg.value
    assert _received_amount > 0, "amount should be higher than 0"
    assert _received_amount == _amount + _rewardsAmount, "recv amount not match partials"

    log PaymentReceived(msg.sender, msg.sender, _amount + _rewardsAmount)

    self._wrap_and_approve(self.lendingPoolCoreContract, _received_amount)
    self._receiveFunds(_borrower, self, _amount, _rewardsAmount)


@external
def receiveFunds(_borrower: address, _amount: uint256, _rewardsAmount: uint256):

    """
    @notice Receive funds in the pool ERC20 from a borrower as part of a loan payment
    @dev Logs the `FundsReceipt` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _borrower The wallet address to receive the funds from
    @param _amount Value of the loans principal to receive
    @param _rewardsAmount Value of the loans interest (including the protocol fee share) to receive
    """

    assert self._fundsAreAllowed(_borrower, self.lendingPoolCoreContract, _amount + _rewardsAmount), "insufficient liquidity"
    self._receiveFunds(_borrower, _borrower, _amount, _rewardsAmount)


@external
def receiveFundsFromLiquidation(
    _borrower: address,
    _amount: uint256,
    _rewardsAmount: uint256,
    _distributeToProtocol: bool,
    _investedAmount: uint256,
    _origin: String[30]
):

    """
    @notice Receive funds from a liquidation in the pool ERC20
    @dev Logs the `FundsReceipt` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _borrower The wallet address to receive the funds from
    @param _amount Value of the loans principal to receive
    @param _rewardsAmount Value of the rewards after liquidation (including the protocol fee share) to receive
    @param _distributeToProtocol Wether to distribute the protocol fees or not
    @param _origin Identification of the liquidation method
    """

    assert self._fundsAreAllowed(_borrower, self.lendingPoolCoreContract, _amount + _rewardsAmount), "insufficient liquidity"
    self._receiveFundsFromLiquidation(_borrower, _borrower, _amount, _rewardsAmount, _distributeToProtocol, _investedAmount, _origin)


@payable
@external
def receiveFundsFromLiquidationEth(
    _borrower: address,
    _amount: uint256,
    _rewardsAmount: uint256,
    _distributeToProtocol: bool,
    _investedAmount: uint256,
    _origin: String[30]
):

    """
    @notice Receive funds from a liquidation in ETH
    @dev Logs the `FundsReceipt` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _borrower The wallet address to receive the funds from
    @param _amount Value of the loans principal to receive in wei
    @param _rewardsAmount Value of the rewards after liquidation (including the protocol fee share) to receive in wei
    @param _distributeToProtocol Wether to distribute the protocol fees or not
    @param _origin Identification of the liquidation method
    """

    receivedAmount: uint256 = msg.value

    assert receivedAmount == _amount + _rewardsAmount, "recv amount not match partials"

    log PaymentReceived(msg.sender, msg.sender, receivedAmount)

    self._wrap_and_approve(self.lendingPoolCoreContract, receivedAmount)
    self._receiveFundsFromLiquidation(_borrower, self, _amount, _rewardsAmount, _distributeToProtocol, _investedAmount, _origin)

Contract Security Audit

Contract ABI

API
[{"name":"OwnerProposed","inputs":[{"name":"ownerIndexed","type":"address","indexed":true},{"name":"proposedOwnerIndexed","type":"address","indexed":true},{"name":"owner","type":"address","indexed":false},{"name":"proposedOwner","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"OwnershipTransferred","inputs":[{"name":"ownerIndexed","type":"address","indexed":true},{"name":"proposedOwnerIndexed","type":"address","indexed":true},{"name":"owner","type":"address","indexed":false},{"name":"proposedOwner","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"MaxCapitalEfficiencyChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"uint256","indexed":false},{"name":"newValue","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ProtocolWalletChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"address","indexed":false},{"name":"newValue","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ProtocolFeesShareChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"uint256","indexed":false},{"name":"newValue","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"LoansPeripheralAddressSet","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"address","indexed":false},{"name":"newValue","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"LiquidationsPeripheralAddressSet","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"address","indexed":false},{"name":"newValue","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"LiquidityControlsAddressSet","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"address","indexed":false},{"name":"newValue","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"WhitelistStatusChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"value","type":"bool","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"WhitelistAddressAdded","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"value","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"WhitelistAddressRemoved","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"value","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ContractStatusChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"value","type":"bool","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"InvestingStatusChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"value","type":"bool","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ContractDeprecated","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"Deposit","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdrawal","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"FundsTransfer","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"FundsReceipt","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"rewardsPool","type":"uint256","indexed":false},{"name":"rewardsProtocol","type":"uint256","indexed":false},{"name":"investedAmount","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false},{"name":"fundsOrigin","type":"string","indexed":false}],"anonymous":false,"type":"event"},{"name":"PaymentSent","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"PaymentReceived","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"view","type":"function","name":"maxFundsInvestable","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"theoreticalMaxFundsInvestable","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"theoreticalMaxFundsInvestableAfterDeposit","inputs":[{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"lenderFunds","inputs":[{"name":"_lender","type":"address"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"currentAmountDeposited","type":"uint256"},{"name":"totalAmountDeposited","type":"uint256"},{"name":"totalAmountWithdrawn","type":"uint256"},{"name":"sharesBasisPoints","type":"uint256"},{"name":"activeForRewards","type":"bool"}]}]},{"stateMutability":"view","type":"function","name":"lockedAmount","inputs":[{"name":"_lender","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_lendingPoolCoreContract","type":"address"},{"name":"_lendingPoolLockContract","type":"address"},{"name":"_erc20TokenContract","type":"address"},{"name":"_protocolWallet","type":"address"},{"name":"_protocolFeesShare","type":"uint256"},{"name":"_maxCapitalEfficienty","type":"uint256"},{"name":"_whitelistEnabled","type":"bool"}],"outputs":[]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"nonpayable","type":"function","name":"proposeOwner","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claimOwnership","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"changeMaxCapitalEfficiency","inputs":[{"name":"_value","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"changeProtocolWallet","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"changeProtocolFeesShare","inputs":[{"name":"_value","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"setLoansPeripheralAddress","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"setLiquidationsPeripheralAddress","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"setLiquidityControlsAddress","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"changeWhitelistStatus","inputs":[{"name":"_flag","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"addWhitelistedAddress","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"removeWhitelistedAddress","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"changePoolStatus","inputs":[{"name":"_flag","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deprecate","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit","inputs":[{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"depositEth","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"withdrawEth","inputs":[{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"sendFunds","inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"sendFundsEth","inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"receiveFundsEth","inputs":[{"name":"_borrower","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_rewardsAmount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"receiveFunds","inputs":[{"name":"_borrower","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_rewardsAmount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"receiveFundsFromLiquidation","inputs":[{"name":"_borrower","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_rewardsAmount","type":"uint256"},{"name":"_distributeToProtocol","type":"bool"},{"name":"_investedAmount","type":"uint256"},{"name":"_origin","type":"string"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"receiveFundsFromLiquidationEth","inputs":[{"name":"_borrower","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_rewardsAmount","type":"uint256"},{"name":"_distributeToProtocol","type":"bool"},{"name":"_investedAmount","type":"uint256"},{"name":"_origin","type":"string"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"proposedOwner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"loansContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"lendingPoolCoreContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"lendingPoolLockContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"erc20TokenContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"liquidationsPeripheralContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"liquidityControlsContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"protocolWallet","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"protocolFeesShare","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"maxCapitalEfficienty","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"isPoolActive","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"isPoolDeprecated","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"isPoolInvesting","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"whitelistEnabled","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"whitelistedAddresses","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"bool"}]}]

602061425b6000396000518060a01c61425657604052602061427b6000396000518060a01c61425657606052602061429b6000396000518060a01c6142565760805260206142bb6000396000518060a01c6142565760a052602061431b6000396000518060011c6142565760c05234614256576040516100d857601b60e0527f6164647265737320697320746865207a65726f206164647265737300000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b60805161013e57601b60e0527f6164647265737320697320746865207a65726f206164647265737300000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b60a0516101a457601b60e0527f6164647265737320697320746865207a65726f206164647265737300000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b61271060206142db600039600051111561021757601c60e0527f66656573207368617265206578636565647320313030303020627073000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b61271060206142fb600039600051111561028a57601d60e0527f6361706974616c206566662065786365656473203130303030206270730000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b33600055604051600355606051600455608051613f6c5260a05160075560206142db60003960005160085560206142fb6000396000516009556001600a5560c051156102d75760c051600d555b613f6c6102e961000039613f8c610000f36003361161000c576122b7565b60003560e01c63439370b1811861007d5760043610613f5a57337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336102c052346102e05260406102c0a260035460405234606052610069613e86565b3461014052306101605261007b6129a6565b005b6312d8f916811861020f5760643610613f5a576004358060a01c613f5a5761048052346104a0526104a05161011257601e6104c0527f616d6f756e742073686f756c6420626520686967686572207468616e203000006104e0526104c0506104c051806104e001601f826000031636823750506308c379a06104805260206104a052601f19601f6104c051011660440161049cfd5b602435604435808201828110613f5a57905090506104a051181561019657601e6104c0527f7265637620616d6f756e74206e6f74206d61746368207061727469616c7300006104e0526104c0506104c051806104e001601f826000031636823750506308c379a06104805260206104a052601f19601f6104c051011660440161049cfd5b337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336104c052602435604435808201828110613f5a57905090506104e05260406104c0a26003546040526104a0516060526101f0613e86565b6104805161038052306103a052604060246103c03761020d6139db565b005b63243ee75d81186103765760e43610613f5a576004358060a01c613f5a576104c0526064358060011c613f5a576104e05260a435600401601e813511613f5a5780358061050052602082018035610520525050503461054052602435604435808201828110613f5a57905090506105405118156102ec57601e610560527f7265637620616d6f756e74206e6f74206d61746368207061727469616c7300006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd5b337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336105605261054051610580526040610560a260035460405261054051606052610336613e86565b6104c05161038052306103a052604060246103c0376104e0516104005260843561042052610500518061044052610520516104605250610374613bf5565b005b63172b8500811861039e5760043610613f5a5734613f5a57602061039a60c06126dd565b60c0f35b632b90f8da81186103cb5760043610613f5a5734613f5a57602060006040526103c760e06127bc565b60e0f35b63ef595e5981186103f95760243610613f5a5734613f5a5760206004356040526103f560e06127bc565b60e0f35b633a89ced181186104865760243610613f5a576004358060a01c613f5a5760405234613f5a5760a060035463e2ae93fb60605260405160805260a060606024607c845afa61044c573d600060003e3d6000fd5b60a03d10613f5a57606051610120526080516101405260a0516101605260c0516101805260e0518060011c613f5a576101a0526101209050f35b63a153e70881186105625760243610613f5a576004358060a01c613f5a5760405234613f5a57600654635fd05249606052602060606004607c845afa6104d1573d600060003e3d6000fd5b60203d10613f5a576060518060011c613f5a5760a05260a09050516104fe57600060c052602060c0610560565b60045463ebdef1d360a05260405160c052604060a0602460bc845afa610529573d600060003e3d6000fd5b60403d10613f5a5760a09050805160605260208101516080525042606051101561055b57600060a052602060a0610560565b602060805bf35b63b5ed298a81186107715760243610613f5a576004358060a01c613f5a5760405234613f5a576000543318156105ef57601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161065357601c6060527f5f6164647265737320697420746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600054186106bb5760206060527f70726f706f736564206f776e6572206164647220697320746865206f776e657260805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516001541861072357601f6060527f70726f706f736564206f776e65722061646472206973207468652073616d650060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516001556040516000547fb4c8aadbed5e1d6c2b41b85b2a233853a33c3f9284159abad98bf7d24d5a6f746000546060526040516080526020613f6c60003960005160a05260606060a3005b634e71e0c881186108435760043610613f5a5734613f5a576001543318156107f057601e6040527f6d73672e73656e646572206973206e6f74207468652070726f706f736564000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6001546000547fd5b903f8ba0e47f8a7bfe27b5098230bd3900b46d8b430e37480be7096ca7f6d6000546040526001546060526020613f6c60003960005160805260606040a36001546000556000600155005b63521dafde81186109e65760243610613f5a5734613f5a576000543318156108c257601b6040527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b612710600435111561092b57601d6040527f6361706974616c2065666620657863656564732031303030302062707300000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b600954600435186109935760156040527f6e65772076616c7565206973207468652073616d65000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6020613f6c6000396000517fb491624c5a1516b49b90734511615a87e4ded5220ea4f9dffbc445e1e729feb06009546040526004356060526020613f6c60003960005160805260606040a2600435600955005b6302df8fb28118610b925760243610613f5a576004358060a01c613f5a5760405234613f5a57600054331815610a7357601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051610ad757601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60075460405118610b3f5760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517f1ea3347149c73008cd0d341805c3c18b7038965560c1190774d3c4de398390bb6007546060526040516080526020613f6c60003960005160a05260606060a2604051600755005b6302888a2b8118610d355760243610613f5a5734613f5a57600054331815610c1157601b6040527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6127106004351115610c7a57601c6040527f666565732073686172652065786365656473203130303030206270730000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b60085460043518610ce25760156040527f6e65772076616c7565206973207468652073616d65000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6020613f6c6000396000517f7890aed53fbf779ec76f35fb1fc7e05b091dd1fed9b766e73fcabe4f45c5010d6008546040526004356060526020613f6c60003960005160805260606040a2600435600855005b632305fe468118610f465760243610613f5a576004358060a01c613f5a5760405234613f5a57600054331815610dc257601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051610e2657601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040513b610e8b57601a6060527f5f61646472657373206973206e6f74206120636f6e747261637400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60025460405118610ef35760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517f0524dd63c4e156d7c3f5cc18e87c0474a724ea2d75c277bab3dc95390ba5e4d16002546060526040516080526020613f6c60003960005160a05260606060a2604051600255005b63dfe5cf4e81186111575760243610613f5a576004358060a01c613f5a5760405234613f5a57600054331815610fd357601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161103757601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040513b61109c57601a6060527f5f61646472657373206973206e6f74206120636f6e747261637400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600554604051186111045760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517fd5cf3817f09a159f02f30e9ca8842239c472b01ce4ee28c5bd3dae53f1ed71b96005546060526040516080526020613f6c60003960005160a05260606060a2604051600555005b637eefa48781186113685760243610613f5a576004358060a01c613f5a5760405234613f5a576000543318156111e457601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161124857601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040513b6112ad57601a6060527f5f61646472657373206973206e6f74206120636f6e747261637400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600654604051186113155760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517fc9dff19604a1a239924a95245890bf12b12dec6ce9529c14a187ffae033d63b06006546060526040516080526020613f6c60003960005160a05260606060a2604051600655005b63d2013c9281186114aa5760243610613f5a576004358060011c613f5a5760405234613f5a576000543318156113f557601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600d541861145d5760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600d556020613f6c6000396000517fc216c05736611219062f8c847b62cd125972df155448dab8f40dbe52478c667f6040516060526020613f6c60003960005160805260406060a2005b6329975b4381186116cc5760243610613f5a576004358060a01c613f5a5760405234613f5a5760005433181561153757601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161159b57601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600d546115ff5760156060527f77686974656c6973742069732064697361626c6564000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600e6040516020526000526040600020541561167257601e6060527f6164647265737320697320616c72656164792077686974656c6973746564000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6001600e6040516020526000526040600020556020613f6c6000396000517f9a314065097149d1b802249c3157f5702a763e7debf83186e71de8961465c3416040516060526020613f6c60003960005160805260406060a2005b63530cd5ab81186118ed5760243610613f5a576004358060a01c613f5a5760405234613f5a5760005433181561175957601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516117bd57601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600d546118215760156060527f77686974656c6973742069732064697361626c6564000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600e60405160205260005260406000205461189357601a6060527f61646472657373206973206e6f742077686974656c697374656400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6000600e6040516020526000526040600020556020613f6c6000396000517fc409716545a0317597926477653ff23c349850a362ee8114c355e9f031cadb176040516060526020613f6c60003960005160805260406060a2005b6308ef62178118611aaf5760243610613f5a576004358060011c613f5a576101405234613f5a5760005433181561198457601b610160527f6d73672e73656e646572206973206e6f7420746865206f776e657200000000006101805261016050610160518061018001601f826000031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b61014051600a55610140516119e0576000600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd26000610160526020613f6c600039600051610180526040610160a25b610140516119ef576000611a12565b600c54611a0f57600060a052611a06610160612582565b61016051611a12565b60005b15611a64576001600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd26001610180526020613f6c6000396000516101a0526040610180a25b6020613f6c6000396000517ff1f3fb69901207764e1ded1276f81ef0e7d27d4c937f4290a397554a78b942f261014051610160526020613f6c600039600051610180526040610160a2005b630fcc0c288118611c6b5760043610613f5a5734613f5a57600054331815611b2e57601b6040527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b600b5415611b9357601a6040527f706f6f6c20697320616c7265616479206465707265636174656400000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6001600b556000600a556000600c556020613f6c6000396000517ff1f3fb69901207764e1ded1276f81ef0e7d27d4c937f4290a397554a78b942f260006040526020613f6c60003960005160605260406040a26020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260006040526020613f6c60003960005160605260406040a26020613f6c6000396000517fdd10c817d080a89ad8dd5d6c365f18b6eed6b4c4c66bd37933429277d3ae3da76020613f6c60003960005160405260206040a2005b63b6b55f258118611d225760243610613f5a5734613f5a5733604052600354606052600435608052611c9e6102c0612357565b6102c051611d0c5760186102e0527f6e6f7420656e6f7567682066756e647320616c6c6f7765640000000000000000610300526102e0506102e0518061030001601f826000031636823750506308c379a06102a05260206102c052601f19601f6102e05101166044016102bcfd5b600435610140523361016052611d206129a6565b005b632e1a7d4d8118611d505760243610613f5a5734613f5a57600435610140523361016052611d4e612e57565b005b63c311d0498118611d905760243610613f5a5734613f5a57600435610140523061016052611d7c612e57565b33604052600435606052611d8e613dfc565b005b636f64234e8118611dd85760443610613f5a576004358060a01c613f5a576102605234613f5a576102605161014052610260516101605260243561018052611dd6613279565b005b638396b88a8118611e325760443610613f5a576004358060a01c613f5a576102605234613f5a576102605161014052306101605260243561018052611e1b613279565b61026051604052602435606052611e30613dfc565b005b6315e7c65a8118611f185760643610613f5a576004358060a01c613f5a576104805234613f5a5761048051604052600354606052602435604435808201828110613f5a5790509050608052611e886104a0612357565b6104a051611ef65760166104c0527f696e73756666696369656e74206c6971756964697479000000000000000000006104e0526104c0506104c051806104e001601f826000031636823750506308c379a06104805260206104a052601f19601f6104c051011660440161049cfd5b6104805161038052610480516103a052604060246103c037611f166139db565b005b63d484551181186120515760e43610613f5a576004358060a01c613f5a576104c0526064358060011c613f5a576104e05260a435600401601e813511613f5a57803580610500526020820180356105205250505034613f5a576104c051604052600354606052602435604435808201828110613f5a5790509050608052611fa0610540612357565b6105405161200e576016610560527f696e73756666696369656e74206c6971756964697479000000000000000000006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd5b6104c051610380526104c0516103a052604060246103c0376104e051610400526084356104205261050051806104405261052051610460525061204f613bf5565b005b638da5cb5b81186120755760043610613f5a5734613f5a5760005460405260206040f35b63d153b60c81186120995760043610613f5a5734613f5a5760015460405260206040f35b6399c91fc481186120bd5760043610613f5a5734613f5a5760025460405260206040f35b63a6def0a081186120e15760043610613f5a5734613f5a5760035460405260206040f35b632c57b1fb81186121055760043610613f5a5734613f5a5760045460405260206040f35b63856e848881186121315760043610613f5a5734613f5a576020613f6c60003960005160405260206040f35b638f00990681186121555760043610613f5a5734613f5a5760055460405260206040f35b63bfe767ea81186121795760043610613f5a5734613f5a5760065460405260206040f35b6306d6e63f811861219d5760043610613f5a5734613f5a5760075460405260206040f35b63afda13e981186121c15760043610613f5a5734613f5a5760085460405260206040f35b63af3f081c81186121e55760043610613f5a5734613f5a5760095460405260206040f35b63df868ed381186122095760043610613f5a5734613f5a57600a5460405260206040f35b63e76977e8811861222d5760043610613f5a5734613f5a57600b5460405260206040f35b63ab8f5b3c81186122515760043610613f5a5734613f5a57600c5460405260206040f35b6351fb012d81186122755760043610613f5a5734613f5a57600d5460405260206040f35b6306c933d881186122b55760243610613f5a576004358060a01c613f5a5760405234613f5a57600e60405160205260005260406000205460605260206060f35b505b6020613f6c60003960005133181561232657601f6040527f6d73672e73656e646572206973206e6f7420746865205745544820616464720060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336040523460605260406040a2005b6020613f6c60003960005163dd62ed3e60c05260405160e05260605161010052602060c0604460dc845afa612391573d600060003e3d6000fd5b60203d10613f5a5760c090505160a05260a0516080511115815250565b604051606051808201828110613f5a57905090506123d057600081525061240e565b608051606051612710810281612710820418613f5a579050604051606051808201828110613f5a57905090508015613f5a5780820490509050108152505b565b600354634fe0bd1e60e052602060e0600460fc845afa612435573d600060003e3d6000fd5b60203d10613f5a5760e090505160a051808201828110613f5a579050905060c052600354630c042367610100526020610100600461011c845afa61247e573d600060003e3d6000fd5b60203d10613f5a5761010090505160e05260c05160405260e0516060526009546080526124ac6101006123ae565b61010051815250565b600354634fe0bd1e610100526020610100600461011c845afa6124dd573d600060003e3d6000fd5b60203d10613f5a5761010090505160a051808201828110613f5a579050905060c051808201828110613f5a579050905060e052600354630c042367610120526020610120600461013c845afa612538573d600060003e3d6000fd5b60203d10613f5a5761012090505160a051808203828111613f5a57905090506101005260e051604052610100516060526009546080526125796101206123ae565b61012051815250565b600354634fe0bd1e60e052602060e0600460fc845afa6125a7573d600060003e3d6000fd5b60203d10613f5a5760e090505160a051808203828111613f5a579050905060c052600354630c042367610100526020610100600461011c845afa6125f0573d600060003e3d6000fd5b60203d10613f5a5761010090505160e05260c05160405260e05160605260095460805261261e6101006123ae565b61010051815250565b600354634fe0bd1e60e052602060e0600460fc845afa61264c573d600060003e3d6000fd5b60203d10613f5a5760e090505160a051808203828111613f5a579050905060c052600354630c042367610100526020610100600461011c845afa612695573d600060003e3d6000fd5b60203d10613f5a5761010090505160a051808201828110613f5a579050905060e05260c05160405260e0516060526009546080526126d46101006123ae565b61010051815250565b600354634fe0bd1e606052602060606004607c845afa612702573d600060003e3d6000fd5b60203d10613f5a576060905051604052600354630c042367608052602060806004609c845afa612737573d600060003e3d6000fd5b60203d10613f5a576080905051606052604051606051808201828110613f5a579050905060095480612710036127108111613f5a579050808202811583838304141715613f5a57905090506127108104905060805260405160805111156127a25760008152506127ba565b604051608051808203828111613f5a57905090508152505b565b600354634fe0bd1e608052602060806004609c845afa6127e1573d600060003e3d6000fd5b60203d10613f5a576080905051606052600354630c04236760a052602060a0600460bc845afa612816573d600060003e3d6000fd5b60203d10613f5a5760a0905051608052606051608051808201828110613f5a5790509050604051808201828110613f5a5790509050600954808202811583838304141715613f5a5790509050612710810490508152505661287c573d600060003e3d6000fd5b60403d10613f5a57608090505160605242606051116128da57426006546337f5c136608052602060806004609c845afa6128bb573d600060003e3d6000fd5b60203d10613f5a576080905051808201828110613f5a57905090506060525b606051815250565b60045463ebdef1d360c0523360e052604060c0602460dc845afa61290b573d600060003e3d6000fd5b60403d10613f5a5760c090508051608052602081015160a0525042608051111561295757608051815260a051606051808201828110613f5a57905090506020820152506129a4566129a4565b426006546337f5c13660c052602060c0600460dc845afa61297d573d600060003e3d6000fd5b60203d10613f5a5760c0905051808201828110613f5a579050905081526060516020820152505b565b600b5415612a1457601c610180527f706f6f6c20697320646570726563617465642c207769746864726177000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b600a54612a8157601c610180527f706f6f6c206973206e6f7420616374697665207269676874206e6f77000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b61014051612aef57601f610180527f5f616d6f756e742068617320746f20626520686967686572207468616e2030006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b60065463a1cdb11a6101a052336101c052610140516101e05230610200526003546102205261014051604052612b266101806127bc565b610180516102405260206101a060a46101bc845afa612b4a573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a5761026052610260905051612bd2576018610280527f6d617820706f6f6c2073686172652073757270617373656400000000000000006102a0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b600d54612be0576000612bf1565b600e33602052600052604060002054155b15612c5c57601d610180527f6d73672e73656e646572206973206e6f742077686974656c69737465640000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b600c54612c7e576101405160a052612c75610180612410565b61018051612c81565b60005b15612cd3576001600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260016101a0526020613f6c6000396000516101c05260406101a0a25b604036610180373360405261014051606052612cf06101c06128e2565b6101c080516101805260208101516101a05250600354638340f5496101c052336101e0526101605161020052610140516102205260206101c060646101dc6000855af1612d42573d600060003e3d6000fd5b60203d10613f5a576101c0518060011c613f5a5761024052610240905051612dca576016610260527f6572726f72206372656174696e67206465706f736974000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b60045463daa77c396101c052336101e0526101a051610200526101805161022052803b15613f5a5760006101c060646101dc6000855af1612e10573d600060003e3d6000fd5b50337f364bb76a44233df8584c690de6da7810626a5e77192f3ebc942c35bcb1add24f336101c052610140516101e0526020613f6c6000396000516102005260606101c0a2565b61014051612ec557601f610180527f5f616d6f756e742068617320746f20626520686967686572207468616e2030006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b60035463679a613c6101a052336101c05260206101a060246101bc845afa612ef2573d600060003e3d6000fd5b60203d10613f5a576101a09050516101805261014051610180511015612f7857601e6101a0527f5f616d6f756e74206d6f7265207468616e20776974686472617761626c6500006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b600654632381cbd46101a052336101c0526101805161014051808203828111613f5a57905090506101e0526004546102005260206101a060646101bc845afa612fc6573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a576102205261022090505161304e57601b610240527f77697468647261772077697468696e206c6f636b20706572696f6400000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b61014051600354634fe0bd1e6101a05260206101a060046101bc845afa61307a573d600060003e3d6000fd5b60203d10613f5a576101a090505110156130f45760206101e0527f617661696c61626c652066756e6473206c657373207468616e20616d6f756e74610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b600c5461310257600061311a565b6101405160a0526131146101a0612582565b6101a051155b1561316c576000600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260006101c0526020613f6c6000396000516101e05260406101c0a25b60035463d9caed126101a052336101c052610160516101e052610140516102005260206101a060646101bc6000855af16131ab573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a5761022052610220905051613233576017610240527f6572726f72207769746864726177696e672066756e64730000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b337ff695acaf5d7d7346d00d5877a9b12de569a2d4957907b6dac09986f9070ddefd336101a052610140516101c0526020613f6c6000396000516101e05260606101a0a2565b600b54156132e75760126101a0527f706f6f6c206973206465707265636174656400000000000000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b600a546133545760106101a0527f706f6f6c20697320696e616374697665000000000000000000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b600c546133c15760176101a0527f6d6178206361706974616c2065666620726561636865640000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6002543318156134315760206101a0527f6d73672e73656e646572206973206e6f7420746865206c6f616e7320616464726101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6101405161349f5760176101a0527f5f746f20697320746865207a65726f20616464726573730000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6101805161350d57601f6101a0527f5f616d6f756e742068617320746f20626520686967686572207468616e2030006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6135186101a06126dd565b6101a05161018051111561358c5760166101c0527f696e73756666696369656e74206c6971756964697479000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b600c5461359a5760006135b2565b6101805160a0526135ac6101a0612627565b6101a051155b15613604576000600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260006101c0526020613f6c6000396000516101e05260406101c0a25b600354636f64234e6101a052610160516101c052610180516101e05260206101a060446101bc6000855af161363e573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a57610200526102009050516136c657601d610220527f6572726f722073656e64696e672066756e647320696e204c50436f72650000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b610140517fef265aa5ba98d1c64ea9531227080a274c7f2e0adbfb9a36869e5dc6abcab581610140516101a052610180516101c0526020613f6c6000396000516101e05260606101a0a2565b600c5461373b576101a05160a0526101c05160c0526137326102606124b5565b6102605161373e565b60005b15613790576001600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd26001610280526020613f6c6000396000516102a0526040610280a25b60035463286ed8f06102605261018051610280526101a0516102a0526101c0516102c052610200516102e0526020610260608461027c6000855af16137da573d600060003e3d6000fd5b60203d10613f5a57610260518060011c613f5a576103005261030090505161386257601f610320527f6572726f7220726563656976696e672066756e647320696e204c50436f7265006103405261032050610320518061034001601f826000031636823750506308c379a06102e052602061030052601f19601f6103205101166044016102fcfd5b6101e05115613934576003546397f5e6fc6102605261018051610280526007546102a0526101e0516102c0526020610260606461027c6000855af16138ac573d600060003e3d6000fd5b60203d10613f5a57610260518060011c613f5a576102e0526102e0905051613934576020610300527f6572726f72207472616e7366657272696e672070726f746f636f6c20666565736103205261030050610300518061032001601f826000031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b610160517f4e4b33f1df73b91c2a0524eadc8bf09d5f9d41c52697eac2dd50b5848cf2807b60e061016051610260526101a051610280526101c0516102a0526101e0516102c052610200516102e0526020613f6c6000396000516103005280610320528061026001610220518082526020820161024051815250508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610260a2565b600254331815613a4b576020610400527f6d73672e73656e646572206973206e6f7420746865206c6f616e7320616464726104205261040050610400518061042001601f826000031636823750506308c379a06103c05260206103e052601f19601f6104005101166044016103dcfd5b61038051613ab957601d610400527f5f626f72726f77657220697320746865207a65726f20616464726573730000006104205261040050610400518061042001601f826000031636823750506308c379a06103c05260206103e052601f19601f6104005101166044016103dcfd5b6103c0516103e051808201828110613f5a5790509050613b3957601e610400527f616d6f756e742073686f756c6420626520686967686572207468616e203000006104205261040050610400518061042001601f826000031636823750506308c379a06103c05260206103e052601f19601f6104005101166044016103dcfd5b6103e051600854808202811583838304141715613f5a579050905061271081049050610400526103e05161040051808203828111613f5a57905090506104205261038051610160526103a051610180526103c0516101a052610420516101c052610400516101e0526103c051610200526004610440527f6c6f616e00000000000000000000000000000000000000000000000000000000610460526104408051806102205260208201805161024052505050613bf3613712565b565b600554331815613c6557601d610480527f6d73672e73656e646572206973206e6f742074686520424e20616464720000006104a0526104805061048051806104a001601f826000031636823750506308c379a061044052602061046052601f19601f61048051011660440161045cfd5b61038051613cd357601d610480527f5f626f72726f77657220697320746865207a65726f20616464726573730000006104a0526104805061048051806104a001601f826000031636823750506308c379a061044052602061046052601f19601f61048051011660440161045cfd5b6103c0516103e051808201828110613f5a5790509050613d5357601e610480527f616d6f756e742073686f756c6420626520686967686572207468616e203000006104a0526104805061048051806104a001601f826000031636823750506308c379a061044052602061046052601f19601f61048051011660440161045cfd5b6040366104803761040051613d6f576103e0516104a052613db0565b6103e051600854808202811583838304141715613f5a579050905061271081049050610480526103e05161048051808203828111613f5a57905090506104a0525b61038051610160526103a051610180526103c0516101a0526104a0516101c052610480516101e0526104205161020052610440518061022052610460516102405250613dfa613712565b565b6020613f6c600039600051632e1a7d4d60805260605160a052803b15613f5a57600060806024609c6000855af1613e38573d600060003e3d6000fd5b5060006000600060006060516040516000f115613f5a576040517fd52bd61f7c422d441e024604f4517878fd3305d6acf0fe37baef23ed21af6bc960405160805260605160a05260406080a2565b6020613f6c60003960005163d0e30db0608052803b15613f5a57600060806004609c606051855af1613ebd573d600060003e3d6000fd5b506020613f6c6000396000517fd52bd61f7c422d441e024604f4517878fd3305d6acf0fe37baef23ed21af6bc96020613f6c60003960005160805260605160a05260406080a26020613f6c60003960005163095ea7b360805260405160a05260605160c052602060806044609c6000855af1613f3e573d600060003e3d6000fd5b60203d10613f5a576080518060011c613f5a5760e05260e05050565b600080fda165767970657283000307000b005b600080fd000000000000000000000000d74d518c7cda386eed0ce93df709093032ec8bcb00000000000000000000000027990214fe29e0e760b1af812872afc99cac3328000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005723759d679662cf931d686f129e3296d954519000000000000000000000000000000000000000000000000000000000000009c40000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000001

Deployed Bytecode

0x6003361161000c576122b7565b60003560e01c63439370b1811861007d5760043610613f5a57337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336102c052346102e05260406102c0a260035460405234606052610069613e86565b3461014052306101605261007b6129a6565b005b6312d8f916811861020f5760643610613f5a576004358060a01c613f5a5761048052346104a0526104a05161011257601e6104c0527f616d6f756e742073686f756c6420626520686967686572207468616e203000006104e0526104c0506104c051806104e001601f826000031636823750506308c379a06104805260206104a052601f19601f6104c051011660440161049cfd5b602435604435808201828110613f5a57905090506104a051181561019657601e6104c0527f7265637620616d6f756e74206e6f74206d61746368207061727469616c7300006104e0526104c0506104c051806104e001601f826000031636823750506308c379a06104805260206104a052601f19601f6104c051011660440161049cfd5b337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336104c052602435604435808201828110613f5a57905090506104e05260406104c0a26003546040526104a0516060526101f0613e86565b6104805161038052306103a052604060246103c03761020d6139db565b005b63243ee75d81186103765760e43610613f5a576004358060a01c613f5a576104c0526064358060011c613f5a576104e05260a435600401601e813511613f5a5780358061050052602082018035610520525050503461054052602435604435808201828110613f5a57905090506105405118156102ec57601e610560527f7265637620616d6f756e74206e6f74206d61746368207061727469616c7300006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd5b337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336105605261054051610580526040610560a260035460405261054051606052610336613e86565b6104c05161038052306103a052604060246103c0376104e0516104005260843561042052610500518061044052610520516104605250610374613bf5565b005b63172b8500811861039e5760043610613f5a5734613f5a57602061039a60c06126dd565b60c0f35b632b90f8da81186103cb5760043610613f5a5734613f5a57602060006040526103c760e06127bc565b60e0f35b63ef595e5981186103f95760243610613f5a5734613f5a5760206004356040526103f560e06127bc565b60e0f35b633a89ced181186104865760243610613f5a576004358060a01c613f5a5760405234613f5a5760a060035463e2ae93fb60605260405160805260a060606024607c845afa61044c573d600060003e3d6000fd5b60a03d10613f5a57606051610120526080516101405260a0516101605260c0516101805260e0518060011c613f5a576101a0526101209050f35b63a153e70881186105625760243610613f5a576004358060a01c613f5a5760405234613f5a57600654635fd05249606052602060606004607c845afa6104d1573d600060003e3d6000fd5b60203d10613f5a576060518060011c613f5a5760a05260a09050516104fe57600060c052602060c0610560565b60045463ebdef1d360a05260405160c052604060a0602460bc845afa610529573d600060003e3d6000fd5b60403d10613f5a5760a09050805160605260208101516080525042606051101561055b57600060a052602060a0610560565b602060805bf35b63b5ed298a81186107715760243610613f5a576004358060a01c613f5a5760405234613f5a576000543318156105ef57601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161065357601c6060527f5f6164647265737320697420746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600054186106bb5760206060527f70726f706f736564206f776e6572206164647220697320746865206f776e657260805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516001541861072357601f6060527f70726f706f736564206f776e65722061646472206973207468652073616d650060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516001556040516000547fb4c8aadbed5e1d6c2b41b85b2a233853a33c3f9284159abad98bf7d24d5a6f746000546060526040516080526020613f6c60003960005160a05260606060a3005b634e71e0c881186108435760043610613f5a5734613f5a576001543318156107f057601e6040527f6d73672e73656e646572206973206e6f74207468652070726f706f736564000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6001546000547fd5b903f8ba0e47f8a7bfe27b5098230bd3900b46d8b430e37480be7096ca7f6d6000546040526001546060526020613f6c60003960005160805260606040a36001546000556000600155005b63521dafde81186109e65760243610613f5a5734613f5a576000543318156108c257601b6040527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b612710600435111561092b57601d6040527f6361706974616c2065666620657863656564732031303030302062707300000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b600954600435186109935760156040527f6e65772076616c7565206973207468652073616d65000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6020613f6c6000396000517fb491624c5a1516b49b90734511615a87e4ded5220ea4f9dffbc445e1e729feb06009546040526004356060526020613f6c60003960005160805260606040a2600435600955005b6302df8fb28118610b925760243610613f5a576004358060a01c613f5a5760405234613f5a57600054331815610a7357601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051610ad757601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60075460405118610b3f5760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517f1ea3347149c73008cd0d341805c3c18b7038965560c1190774d3c4de398390bb6007546060526040516080526020613f6c60003960005160a05260606060a2604051600755005b6302888a2b8118610d355760243610613f5a5734613f5a57600054331815610c1157601b6040527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6127106004351115610c7a57601c6040527f666565732073686172652065786365656473203130303030206270730000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b60085460043518610ce25760156040527f6e65772076616c7565206973207468652073616d65000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6020613f6c6000396000517f7890aed53fbf779ec76f35fb1fc7e05b091dd1fed9b766e73fcabe4f45c5010d6008546040526004356060526020613f6c60003960005160805260606040a2600435600855005b632305fe468118610f465760243610613f5a576004358060a01c613f5a5760405234613f5a57600054331815610dc257601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051610e2657601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040513b610e8b57601a6060527f5f61646472657373206973206e6f74206120636f6e747261637400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60025460405118610ef35760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517f0524dd63c4e156d7c3f5cc18e87c0474a724ea2d75c277bab3dc95390ba5e4d16002546060526040516080526020613f6c60003960005160a05260606060a2604051600255005b63dfe5cf4e81186111575760243610613f5a576004358060a01c613f5a5760405234613f5a57600054331815610fd357601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161103757601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040513b61109c57601a6060527f5f61646472657373206973206e6f74206120636f6e747261637400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600554604051186111045760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517fd5cf3817f09a159f02f30e9ca8842239c472b01ce4ee28c5bd3dae53f1ed71b96005546060526040516080526020613f6c60003960005160a05260606060a2604051600555005b637eefa48781186113685760243610613f5a576004358060a01c613f5a5760405234613f5a576000543318156111e457601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161124857601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040513b6112ad57601a6060527f5f61646472657373206973206e6f74206120636f6e747261637400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600654604051186113155760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517fc9dff19604a1a239924a95245890bf12b12dec6ce9529c14a187ffae033d63b06006546060526040516080526020613f6c60003960005160a05260606060a2604051600655005b63d2013c9281186114aa5760243610613f5a576004358060011c613f5a5760405234613f5a576000543318156113f557601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600d541861145d5760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600d556020613f6c6000396000517fc216c05736611219062f8c847b62cd125972df155448dab8f40dbe52478c667f6040516060526020613f6c60003960005160805260406060a2005b6329975b4381186116cc5760243610613f5a576004358060a01c613f5a5760405234613f5a5760005433181561153757601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161159b57601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600d546115ff5760156060527f77686974656c6973742069732064697361626c6564000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600e6040516020526000526040600020541561167257601e6060527f6164647265737320697320616c72656164792077686974656c6973746564000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6001600e6040516020526000526040600020556020613f6c6000396000517f9a314065097149d1b802249c3157f5702a763e7debf83186e71de8961465c3416040516060526020613f6c60003960005160805260406060a2005b63530cd5ab81186118ed5760243610613f5a576004358060a01c613f5a5760405234613f5a5760005433181561175957601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516117bd57601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600d546118215760156060527f77686974656c6973742069732064697361626c6564000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600e60405160205260005260406000205461189357601a6060527f61646472657373206973206e6f742077686974656c697374656400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6000600e6040516020526000526040600020556020613f6c6000396000517fc409716545a0317597926477653ff23c349850a362ee8114c355e9f031cadb176040516060526020613f6c60003960005160805260406060a2005b6308ef62178118611aaf5760243610613f5a576004358060011c613f5a576101405234613f5a5760005433181561198457601b610160527f6d73672e73656e646572206973206e6f7420746865206f776e657200000000006101805261016050610160518061018001601f826000031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b61014051600a55610140516119e0576000600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd26000610160526020613f6c600039600051610180526040610160a25b610140516119ef576000611a12565b600c54611a0f57600060a052611a06610160612582565b61016051611a12565b60005b15611a64576001600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd26001610180526020613f6c6000396000516101a0526040610180a25b6020613f6c6000396000517ff1f3fb69901207764e1ded1276f81ef0e7d27d4c937f4290a397554a78b942f261014051610160526020613f6c600039600051610180526040610160a2005b630fcc0c288118611c6b5760043610613f5a5734613f5a57600054331815611b2e57601b6040527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b600b5415611b9357601a6040527f706f6f6c20697320616c7265616479206465707265636174656400000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6001600b556000600a556000600c556020613f6c6000396000517ff1f3fb69901207764e1ded1276f81ef0e7d27d4c937f4290a397554a78b942f260006040526020613f6c60003960005160605260406040a26020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260006040526020613f6c60003960005160605260406040a26020613f6c6000396000517fdd10c817d080a89ad8dd5d6c365f18b6eed6b4c4c66bd37933429277d3ae3da76020613f6c60003960005160405260206040a2005b63b6b55f258118611d225760243610613f5a5734613f5a5733604052600354606052600435608052611c9e6102c0612357565b6102c051611d0c5760186102e0527f6e6f7420656e6f7567682066756e647320616c6c6f7765640000000000000000610300526102e0506102e0518061030001601f826000031636823750506308c379a06102a05260206102c052601f19601f6102e05101166044016102bcfd5b600435610140523361016052611d206129a6565b005b632e1a7d4d8118611d505760243610613f5a5734613f5a57600435610140523361016052611d4e612e57565b005b63c311d0498118611d905760243610613f5a5734613f5a57600435610140523061016052611d7c612e57565b33604052600435606052611d8e613dfc565b005b636f64234e8118611dd85760443610613f5a576004358060a01c613f5a576102605234613f5a576102605161014052610260516101605260243561018052611dd6613279565b005b638396b88a8118611e325760443610613f5a576004358060a01c613f5a576102605234613f5a576102605161014052306101605260243561018052611e1b613279565b61026051604052602435606052611e30613dfc565b005b6315e7c65a8118611f185760643610613f5a576004358060a01c613f5a576104805234613f5a5761048051604052600354606052602435604435808201828110613f5a5790509050608052611e886104a0612357565b6104a051611ef65760166104c0527f696e73756666696369656e74206c6971756964697479000000000000000000006104e0526104c0506104c051806104e001601f826000031636823750506308c379a06104805260206104a052601f19601f6104c051011660440161049cfd5b6104805161038052610480516103a052604060246103c037611f166139db565b005b63d484551181186120515760e43610613f5a576004358060a01c613f5a576104c0526064358060011c613f5a576104e05260a435600401601e813511613f5a57803580610500526020820180356105205250505034613f5a576104c051604052600354606052602435604435808201828110613f5a5790509050608052611fa0610540612357565b6105405161200e576016610560527f696e73756666696369656e74206c6971756964697479000000000000000000006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd5b6104c051610380526104c0516103a052604060246103c0376104e051610400526084356104205261050051806104405261052051610460525061204f613bf5565b005b638da5cb5b81186120755760043610613f5a5734613f5a5760005460405260206040f35b63d153b60c81186120995760043610613f5a5734613f5a5760015460405260206040f35b6399c91fc481186120bd5760043610613f5a5734613f5a5760025460405260206040f35b63a6def0a081186120e15760043610613f5a5734613f5a5760035460405260206040f35b632c57b1fb81186121055760043610613f5a5734613f5a5760045460405260206040f35b63856e848881186121315760043610613f5a5734613f5a576020613f6c60003960005160405260206040f35b638f00990681186121555760043610613f5a5734613f5a5760055460405260206040f35b63bfe767ea81186121795760043610613f5a5734613f5a5760065460405260206040f35b6306d6e63f811861219d5760043610613f5a5734613f5a5760075460405260206040f35b63afda13e981186121c15760043610613f5a5734613f5a5760085460405260206040f35b63af3f081c81186121e55760043610613f5a5734613f5a5760095460405260206040f35b63df868ed381186122095760043610613f5a5734613f5a57600a5460405260206040f35b63e76977e8811861222d5760043610613f5a5734613f5a57600b5460405260206040f35b63ab8f5b3c81186122515760043610613f5a5734613f5a57600c5460405260206040f35b6351fb012d81186122755760043610613f5a5734613f5a57600d5460405260206040f35b6306c933d881186122b55760243610613f5a576004358060a01c613f5a5760405234613f5a57600e60405160205260005260406000205460605260206060f35b505b6020613f6c60003960005133181561232657601f6040527f6d73672e73656e646572206973206e6f7420746865205745544820616464720060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336040523460605260406040a2005b6020613f6c60003960005163dd62ed3e60c05260405160e05260605161010052602060c0604460dc845afa612391573d600060003e3d6000fd5b60203d10613f5a5760c090505160a05260a0516080511115815250565b604051606051808201828110613f5a57905090506123d057600081525061240e565b608051606051612710810281612710820418613f5a579050604051606051808201828110613f5a57905090508015613f5a5780820490509050108152505b565b600354634fe0bd1e60e052602060e0600460fc845afa612435573d600060003e3d6000fd5b60203d10613f5a5760e090505160a051808201828110613f5a579050905060c052600354630c042367610100526020610100600461011c845afa61247e573d600060003e3d6000fd5b60203d10613f5a5761010090505160e05260c05160405260e0516060526009546080526124ac6101006123ae565b61010051815250565b600354634fe0bd1e610100526020610100600461011c845afa6124dd573d600060003e3d6000fd5b60203d10613f5a5761010090505160a051808201828110613f5a579050905060c051808201828110613f5a579050905060e052600354630c042367610120526020610120600461013c845afa612538573d600060003e3d6000fd5b60203d10613f5a5761012090505160a051808203828111613f5a57905090506101005260e051604052610100516060526009546080526125796101206123ae565b61012051815250565b600354634fe0bd1e60e052602060e0600460fc845afa6125a7573d600060003e3d6000fd5b60203d10613f5a5760e090505160a051808203828111613f5a579050905060c052600354630c042367610100526020610100600461011c845afa6125f0573d600060003e3d6000fd5b60203d10613f5a5761010090505160e05260c05160405260e05160605260095460805261261e6101006123ae565b61010051815250565b600354634fe0bd1e60e052602060e0600460fc845afa61264c573d600060003e3d6000fd5b60203d10613f5a5760e090505160a051808203828111613f5a579050905060c052600354630c042367610100526020610100600461011c845afa612695573d600060003e3d6000fd5b60203d10613f5a5761010090505160a051808201828110613f5a579050905060e05260c05160405260e0516060526009546080526126d46101006123ae565b61010051815250565b600354634fe0bd1e606052602060606004607c845afa612702573d600060003e3d6000fd5b60203d10613f5a576060905051604052600354630c042367608052602060806004609c845afa612737573d600060003e3d6000fd5b60203d10613f5a576080905051606052604051606051808201828110613f5a579050905060095480612710036127108111613f5a579050808202811583838304141715613f5a57905090506127108104905060805260405160805111156127a25760008152506127ba565b604051608051808203828111613f5a57905090508152505b565b600354634fe0bd1e608052602060806004609c845afa6127e1573d600060003e3d6000fd5b60203d10613f5a576080905051606052600354630c04236760a052602060a0600460bc845afa612816573d600060003e3d6000fd5b60203d10613f5a5760a0905051608052606051608051808201828110613f5a5790509050604051808201828110613f5a5790509050600954808202811583838304141715613f5a5790509050612710810490508152505661287c573d600060003e3d6000fd5b60403d10613f5a57608090505160605242606051116128da57426006546337f5c136608052602060806004609c845afa6128bb573d600060003e3d6000fd5b60203d10613f5a576080905051808201828110613f5a57905090506060525b606051815250565b60045463ebdef1d360c0523360e052604060c0602460dc845afa61290b573d600060003e3d6000fd5b60403d10613f5a5760c090508051608052602081015160a0525042608051111561295757608051815260a051606051808201828110613f5a57905090506020820152506129a4566129a4565b426006546337f5c13660c052602060c0600460dc845afa61297d573d600060003e3d6000fd5b60203d10613f5a5760c0905051808201828110613f5a579050905081526060516020820152505b565b600b5415612a1457601c610180527f706f6f6c20697320646570726563617465642c207769746864726177000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b600a54612a8157601c610180527f706f6f6c206973206e6f7420616374697665207269676874206e6f77000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b61014051612aef57601f610180527f5f616d6f756e742068617320746f20626520686967686572207468616e2030006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b60065463a1cdb11a6101a052336101c052610140516101e05230610200526003546102205261014051604052612b266101806127bc565b610180516102405260206101a060a46101bc845afa612b4a573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a5761026052610260905051612bd2576018610280527f6d617820706f6f6c2073686172652073757270617373656400000000000000006102a0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b600d54612be0576000612bf1565b600e33602052600052604060002054155b15612c5c57601d610180527f6d73672e73656e646572206973206e6f742077686974656c69737465640000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b600c54612c7e576101405160a052612c75610180612410565b61018051612c81565b60005b15612cd3576001600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260016101a0526020613f6c6000396000516101c05260406101a0a25b604036610180373360405261014051606052612cf06101c06128e2565b6101c080516101805260208101516101a05250600354638340f5496101c052336101e0526101605161020052610140516102205260206101c060646101dc6000855af1612d42573d600060003e3d6000fd5b60203d10613f5a576101c0518060011c613f5a5761024052610240905051612dca576016610260527f6572726f72206372656174696e67206465706f736974000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b60045463daa77c396101c052336101e0526101a051610200526101805161022052803b15613f5a5760006101c060646101dc6000855af1612e10573d600060003e3d6000fd5b50337f364bb76a44233df8584c690de6da7810626a5e77192f3ebc942c35bcb1add24f336101c052610140516101e0526020613f6c6000396000516102005260606101c0a2565b61014051612ec557601f610180527f5f616d6f756e742068617320746f20626520686967686572207468616e2030006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b60035463679a613c6101a052336101c05260206101a060246101bc845afa612ef2573d600060003e3d6000fd5b60203d10613f5a576101a09050516101805261014051610180511015612f7857601e6101a0527f5f616d6f756e74206d6f7265207468616e20776974686472617761626c6500006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b600654632381cbd46101a052336101c0526101805161014051808203828111613f5a57905090506101e0526004546102005260206101a060646101bc845afa612fc6573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a576102205261022090505161304e57601b610240527f77697468647261772077697468696e206c6f636b20706572696f6400000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b61014051600354634fe0bd1e6101a05260206101a060046101bc845afa61307a573d600060003e3d6000fd5b60203d10613f5a576101a090505110156130f45760206101e0527f617661696c61626c652066756e6473206c657373207468616e20616d6f756e74610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b600c5461310257600061311a565b6101405160a0526131146101a0612582565b6101a051155b1561316c576000600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260006101c0526020613f6c6000396000516101e05260406101c0a25b60035463d9caed126101a052336101c052610160516101e052610140516102005260206101a060646101bc6000855af16131ab573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a5761022052610220905051613233576017610240527f6572726f72207769746864726177696e672066756e64730000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b337ff695acaf5d7d7346d00d5877a9b12de569a2d4957907b6dac09986f9070ddefd336101a052610140516101c0526020613f6c6000396000516101e05260606101a0a2565b600b54156132e75760126101a0527f706f6f6c206973206465707265636174656400000000000000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b600a546133545760106101a0527f706f6f6c20697320696e616374697665000000000000000000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b600c546133c15760176101a0527f6d6178206361706974616c2065666620726561636865640000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6002543318156134315760206101a0527f6d73672e73656e646572206973206e6f7420746865206c6f616e7320616464726101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6101405161349f5760176101a0527f5f746f20697320746865207a65726f20616464726573730000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6101805161350d57601f6101a0527f5f616d6f756e742068617320746f20626520686967686572207468616e2030006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6135186101a06126dd565b6101a05161018051111561358c5760166101c0527f696e73756666696369656e74206c6971756964697479000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b600c5461359a5760006135b2565b6101805160a0526135ac6101a0612627565b6101a051155b15613604576000600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260006101c0526020613f6c6000396000516101e05260406101c0a25b600354636f64234e6101a052610160516101c052610180516101e05260206101a060446101bc6000855af161363e573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a57610200526102009050516136c657601d610220527f6572726f722073656e64696e672066756e647320696e204c50436f72650000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b610140517fef265aa5ba98d1c64ea9531227080a274c7f2e0adbfb9a36869e5dc6abcab581610140516101a052610180516101c0526020613f6c6000396000516101e05260606101a0a2565b600c5461373b576101a05160a0526101c05160c0526137326102606124b5565b6102605161373e565b60005b15613790576001600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd26001610280526020613f6c6000396000516102a0526040610280a25b60035463286ed8f06102605261018051610280526101a0516102a0526101c0516102c052610200516102e0526020610260608461027c6000855af16137da573d600060003e3d6000fd5b60203d10613f5a57610260518060011c613f5a576103005261030090505161386257601f610320527f6572726f7220726563656976696e672066756e647320696e204c50436f7265006103405261032050610320518061034001601f826000031636823750506308c379a06102e052602061030052601f19601f6103205101166044016102fcfd5b6101e05115613934576003546397f5e6fc6102605261018051610280526007546102a0526101e0516102c0526020610260606461027c6000855af16138ac573d600060003e3d6000fd5b60203d10613f5a57610260518060011c613f5a576102e0526102e0905051613934576020610300527f6572726f72207472616e7366657272696e672070726f746f636f6c20666565736103205261030050610300518061032001601f826000031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b610160517f4e4b33f1df73b91c2a0524eadc8bf09d5f9d41c52697eac2dd50b5848cf2807b60e061016051610260526101a051610280526101c0516102a0526101e0516102c052610200516102e0526020613f6c6000396000516103005280610320528061026001610220518082526020820161024051815250508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610260a2565b600254331815613a4b576020610400527f6d73672e73656e646572206973206e6f7420746865206c6f616e7320616464726104205261040050610400518061042001601f826000031636823750506308c379a06103c05260206103e052601f19601f6104005101166044016103dcfd5b61038051613ab957601d610400527f5f626f72726f77657220697320746865207a65726f20616464726573730000006104205261040050610400518061042001601f826000031636823750506308c379a06103c05260206103e052601f19601f6104005101166044016103dcfd5b6103c0516103e051808201828110613f5a5790509050613b3957601e610400527f616d6f756e742073686f756c6420626520686967686572207468616e203000006104205261040050610400518061042001601f826000031636823750506308c379a06103c05260206103e052601f19601f6104005101166044016103dcfd5b6103e051600854808202811583838304141715613f5a579050905061271081049050610400526103e05161040051808203828111613f5a57905090506104205261038051610160526103a051610180526103c0516101a052610420516101c052610400516101e0526103c051610200526004610440527f6c6f616e00000000000000000000000000000000000000000000000000000000610460526104408051806102205260208201805161024052505050613bf3613712565b565b600554331815613c6557601d610480527f6d73672e73656e646572206973206e6f742074686520424e20616464720000006104a0526104805061048051806104a001601f826000031636823750506308c379a061044052602061046052601f19601f61048051011660440161045cfd5b61038051613cd357601d610480527f5f626f72726f77657220697320746865207a65726f20616464726573730000006104a0526104805061048051806104a001601f826000031636823750506308c379a061044052602061046052601f19601f61048051011660440161045cfd5b6103c0516103e051808201828110613f5a5790509050613d5357601e610480527f616d6f756e742073686f756c6420626520686967686572207468616e203000006104a0526104805061048051806104a001601f826000031636823750506308c379a061044052602061046052601f19601f61048051011660440161045cfd5b6040366104803761040051613d6f576103e0516104a052613db0565b6103e051600854808202811583838304141715613f5a579050905061271081049050610480526103e05161048051808203828111613f5a57905090506104a0525b61038051610160526103a051610180526103c0516101a0526104a0516101c052610480516101e0526104205161020052610440518061022052610460516102405250613dfa613712565b565b6020613f6c600039600051632e1a7d4d60805260605160a052803b15613f5a57600060806024609c6000855af1613e38573d600060003e3d6000fd5b5060006000600060006060516040516000f115613f5a576040517fd52bd61f7c422d441e024604f4517878fd3305d6acf0fe37baef23ed21af6bc960405160805260605160a05260406080a2565b6020613f6c60003960005163d0e30db0608052803b15613f5a57600060806004609c606051855af1613ebd573d600060003e3d6000fd5b506020613f6c6000396000517fd52bd61f7c422d441e024604f4517878fd3305d6acf0fe37baef23ed21af6bc96020613f6c60003960005160805260605160a05260406080a26020613f6c60003960005163095ea7b360805260405160a05260605160c052602060806044609c6000855af1613f3e573d600060003e3d6000fd5b60203d10613f5a576080518060011c613f5a5760e05260e05050565b600080fda165767970657283000307000b000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d74d518c7cda386eed0ce93df709093032ec8bcb00000000000000000000000027990214fe29e0e760b1af812872afc99cac3328000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005723759d679662cf931d686f129e3296d954519000000000000000000000000000000000000000000000000000000000000009c40000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : _lendingPoolCoreContract (address): 0xd74d518C7Cda386Eed0Ce93DF709093032eC8bcb
Arg [1] : _lendingPoolLockContract (address): 0x27990214fE29E0e760b1aF812872afc99CAc3328
Arg [2] : _erc20TokenContract (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [3] : _protocolWallet (address): 0x5723759D679662cf931d686f129E3296D9545190
Arg [4] : _protocolFeesShare (uint256): 2500
Arg [5] : _maxCapitalEfficienty (uint256): 8000
Arg [6] : _whitelistEnabled (bool): True

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000d74d518c7cda386eed0ce93df709093032ec8bcb
Arg [1] : 00000000000000000000000027990214fe29e0e760b1af812872afc99cac3328
Arg [2] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [3] : 0000000000000000000000005723759d679662cf931d686f129e3296d9545190
Arg [4] : 00000000000000000000000000000000000000000000000000000000000009c4
Arg [5] : 0000000000000000000000000000000000000000000000000000000000001f40
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.