ETH Price: $3,367.38 (-1.44%)
Gas: 7 Gwei

Contract

0xdc899AB992fbCFbac936CE5a5bC5A86a5d35A66a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Zap200981422024-06-15 15:39:2311 days ago1718465963IN
0xdc899AB9...a5d35A66a
0 ETH0.010134459.4269041
Zap200275092024-06-05 18:46:3520 days ago1717613195IN
0xdc899AB9...a5d35A66a
0 ETH0.0026464619.56521331
Zap200257642024-06-05 12:55:3521 days ago1717592135IN
0xdc899AB9...a5d35A66a
0 ETH0.0028737421.53024421
Zap200238532024-06-05 6:31:4721 days ago1717569107IN
0xdc899AB9...a5d35A66a
0 ETH0.000951237.82428436
Zap200100772024-06-03 8:22:4723 days ago1717402967IN
0xdc899AB9...a5d35A66a
0 ETH0.000917776.7850858
Zap200007892024-06-02 1:14:5924 days ago1717290899IN
0xdc899AB9...a5d35A66a
0 ETH0.000778244.63409619
Zap199995872024-06-01 21:14:1124 days ago1717276451IN
0xdc899AB9...a5d35A66a
0 ETH0.000187314.7388438
Zap199995872024-06-01 21:14:1124 days ago1717276451IN
0xdc899AB9...a5d35A66a
0 ETH0.000187314.7388438
Zap199995872024-06-01 21:14:1124 days ago1717276451IN
0xdc899AB9...a5d35A66a
0 ETH0.000641084.7388438
Zap199984122024-06-01 17:17:5925 days ago1717262279IN
0xdc899AB9...a5d35A66a
0 ETH0.0019406814.34742128
Zap199966212024-06-01 11:18:3525 days ago1717240715IN
0xdc899AB9...a5d35A66a
0 ETH0.000692094.12064806
Zap199881252024-05-31 6:48:2326 days ago1717138103IN
0xdc899AB9...a5d35A66a
0 ETH0.000906437.45520623
Zap199834012024-05-30 14:57:4727 days ago1717081067IN
0xdc899AB9...a5d35A66a
0 ETH0.0048100322.32511426
Zap199828142024-05-30 12:58:5927 days ago1717073939IN
0xdc899AB9...a5d35A66a
0 ETH0.0034156116.53194578
Zap199805372024-05-30 5:20:4727 days ago1717046447IN
0xdc899AB9...a5d35A66a
0 ETH0.000746626.17599246
Zap199788492024-05-29 23:40:3527 days ago1717026035IN
0xdc899AB9...a5d35A66a
0 ETH0.000712566.64631908
Zap199778252024-05-29 20:14:3527 days ago1717013675IN
0xdc899AB9...a5d35A66a
0 ETH0.001345169.94323575
Zap199778052024-05-29 20:10:3527 days ago1717013435IN
0xdc899AB9...a5d35A66a
0 ETH0.0023476810.65555883
Zap199735812024-05-29 5:58:3528 days ago1716962315IN
0xdc899AB9...a5d35A66a
0 ETH0.001960827.79839315
Zap199709162024-05-28 21:01:1128 days ago1716930071IN
0xdc899AB9...a5d35A66a
0 ETH0.0027833111.06949171
Zap199700862024-05-28 18:14:1129 days ago1716920051IN
0xdc899AB9...a5d35A66a
0 ETH0.0032319814.66792031
Zap199627372024-05-27 17:36:2330 days ago1716831383IN
0xdc899AB9...a5d35A66a
0 ETH0.0029318121.67473931
Zap199621902024-05-27 15:46:1130 days ago1716824771IN
0xdc899AB9...a5d35A66a
0 ETH0.0037293130.67503083
Zap199593002024-05-27 6:04:3530 days ago1716789875IN
0xdc899AB9...a5d35A66a
0 ETH0.00099687.36929471
Zap199507442024-05-26 1:23:2331 days ago1716686603IN
0xdc899AB9...a5d35A66a
0 ETH0.000369522.73205218
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
YCRV Zap v3

Compiler Version
vyper:0.3.9

Optimization Enabled:
N/A

Other Settings:
MIT license

Contract Source Code (Vyper language format)

# @version 0.3.9
"""
@title YCRV Zap v3
@license GNU AGPLv3
@author Yearn Finance
@notice Zap into yCRV ecosystem positions in a single transaction
@dev To use safely, supply a reasonable min_out value during your zap.
"""

from vyper.interfaces import ERC20
from vyper.interfaces import ERC20Detailed

interface Vault:
    def deposit(amount: uint256, recipient: address = msg.sender) -> uint256: nonpayable
    def withdraw(shares: uint256) -> uint256: nonpayable
    def pricePerShare() -> uint256: view

interface IYCRV:
    def burn_to_mint(amount: uint256, recipient: address = msg.sender) -> uint256: nonpayable
    def mint(amount: uint256, recipient: address = msg.sender) -> uint256: nonpayable

interface Curve:
    def get_virtual_price() -> uint256: view
    def get_dy(i: int128, j: int128, dx: uint256) -> uint256: view
    def exchange(i: int128, j: int128, _dx: uint256, _min_dy: uint256) -> uint256: nonpayable
    def add_liquidity(amounts: uint256[2], min_mint_amount: uint256) -> uint256: nonpayable
    def remove_liquidity_one_coin(_token_amount: uint256, i: int128, min_amount: uint256) -> uint256: nonpayable
    def remove_liquidity(_burn_amount: uint256, _min_amounts: uint256[2]) -> uint256[2]: nonpayable
    def calc_token_amount(amounts: uint256[2], deposit: bool) -> uint256: view
    def calc_withdraw_one_coin(_burn_amount: uint256, i: int128, _previous: bool = False) -> uint256: view
    def totalSupply() -> uint256: view
    def balances(index: uint256) -> uint256: view

event UpdateSweepRecipient:
    sweep_recipient: indexed(address)

event UpdateMintBuffer:
    mint_buffer: uint256

YVECRV: constant(address) =     0xc5bDdf9843308380375a611c18B50Fb9341f502A # YVECRV
CRV: constant(address) =        0xD533a949740bb3306d119CC777fa900bA034cd52 # CRV
YVBOOST: constant(address) =    0x9d409a0A012CFbA9B15F6D4B36Ac57A46966Ab9a # YVBOOST
YCRV: constant(address) =       0xFCc5c47bE19d06BF83eB04298b026F81069ff65b # YCRV
STYCRV: constant(address) =     0x27B5739e22ad9033bcBf192059122d163b60349D # ST-YCRV
LPYCRV_V1: constant(address) =  0xc97232527B62eFb0D8ed38CF3EA103A6CcA4037e # LP-YCRV Deprecated
LPYCRV_V2: constant(address) =  0x6E9455D109202b426169F0d8f01A3332DAE160f3 # LP-YCRV
POOL_V1: constant(address) =    0x453D92C7d4263201C69aACfaf589Ed14202d83a4 # OLD POOL
POOL_V2: constant(address) =    0x99f5aCc8EC2Da2BC0771c32814EFF52b712de1E5 # NEW POOL
CVXCRV: constant(address) =     0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7 # CVXCRV
CVXCRVPOOL: constant(address) = 0x9D0464996170c6B9e75eED71c68B99dDEDf279e8 # CVXCRVPOOL
LEGACY_TOKENS: public(immutable(address[2]))
OUTPUT_TOKENS: public(immutable(address[3]))

sweep_recipient: public(address)
mint_buffer: public(uint256)

@external
@view
def name() -> String[32]:
    return "YCRV Zap v3"

@external
def __init__():
    self.sweep_recipient = 0xFEB4acf3df3cDEA7399794D0869ef76A6EfAff52
    self.mint_buffer = 15

    assert ERC20(YVECRV).approve(YCRV, max_value(uint256))
    assert ERC20(YCRV).approve(STYCRV, max_value(uint256))
    assert ERC20(YCRV).approve(POOL_V2, max_value(uint256))
    assert ERC20(POOL_V2).approve(LPYCRV_V2, max_value(uint256))
    assert ERC20(CRV).approve(POOL_V2, max_value(uint256))
    assert ERC20(CRV).approve(YCRV, max_value(uint256))
    assert ERC20(CVXCRV).approve(CVXCRVPOOL, max_value(uint256))

    LEGACY_TOKENS = [YVECRV, YVBOOST]
    OUTPUT_TOKENS = [YCRV, STYCRV, LPYCRV_V2]

@external
def zap(_input_token: address, _output_token: address, _amount_in: uint256 = max_value(uint256), _min_out: uint256 = 0, _recipient: address = msg.sender) -> uint256:
    """
    @notice 
        This function allows users to zap from any legacy tokens, CRV, or any yCRV tokens as input 
        into any yCRV token as output.
    @dev 
        When zapping between tokens that might incur slippage, it is recommended to supply a _min_out value > 0.
        You can estimate the expected output amount by making an off-chain call to this contract's 
        "calc_expected_out" helper.
        Discount the result by some extra % to allow buffer, and set as _min_out.
    @param _input_token Can be CRV, yveCRV, yvBOOST, cvxCRV or any yCRV token address that user wishes to migrate from
    @param _output_token The yCRV token address that user wishes to migrate to
    @param _amount_in Amount of input token to migrate, defaults to full balance
    @param _min_out The minimum amount of output token to receive
    @param _recipient The address where the output token should be sent
    @return Amount of output token transferred to the _recipient
    """
    assert _amount_in > 0
    assert _input_token != _output_token # dev: input and output token are same
    assert _output_token in OUTPUT_TOKENS  # dev: invalid output token address

    amount: uint256 = _amount_in
    if amount == max_value(uint256):
        amount = ERC20(_input_token).balanceOf(msg.sender)

    if _input_token in LEGACY_TOKENS:
        return self._zap_from_legacy(_input_token, _output_token, amount, _min_out, _recipient)
    elif _input_token == CRV or _input_token == CVXCRV:
        assert ERC20(_input_token).transferFrom(msg.sender, self, amount)
        if _input_token == CVXCRV:
            amount = Curve(CVXCRVPOOL).exchange(1, 0, amount, 0)
        amount = self._convert_crv(amount)
    elif _input_token in [LPYCRV_V1, POOL_V1]:
        # If this input token path is chosen, we assume it is a migration. 
        # This allows us to hardcode a single route, 
        # no need for many permutations to all possible outputs.
        assert _output_token == LPYCRV_V2
        assert ERC20(_input_token).transferFrom(msg.sender, self, amount)
        if _input_token == LPYCRV_V1:
            amount = Vault(LPYCRV_V1).withdraw(amount)
        amounts: uint256[2] = Curve(POOL_V1).remove_liquidity(amount, [0,0])
        amount = Curve(POOL_V2).add_liquidity(amounts, 0)
        amount = Vault(LPYCRV_V2).deposit(amount, _recipient)
        assert amount >= _min_out
        return amount
    else:
        assert _input_token in OUTPUT_TOKENS or _input_token == POOL_V2 # dev: invalid input token address
        assert ERC20(_input_token).transferFrom(msg.sender, self, amount)

    if _input_token == STYCRV:
        amount = Vault(STYCRV).withdraw(amount)
    elif _input_token in [LPYCRV_V2, POOL_V2]:
        if _input_token == LPYCRV_V2:
            amount = Vault(LPYCRV_V2).withdraw(amount)
        amount = Curve(POOL_V2).remove_liquidity_one_coin(amount, 1, 0)

    if _output_token == YCRV:
        assert amount >= _min_out # dev: min out
        ERC20(_output_token).transfer(_recipient, amount)
        return amount
    return self._convert_to_output(_output_token, amount, _min_out, _recipient)

@internal
def _zap_from_legacy(_input_token: address, _output_token: address, _amount: uint256, _min_out: uint256, _recipient: address) -> uint256:
    # @dev This function handles any inputs that are legacy tokens (yveCRV, yvBOOST)
    amount: uint256 = _amount
    assert ERC20(_input_token).transferFrom(msg.sender, self, amount)
    if _input_token == YVBOOST:
        amount = Vault(YVBOOST).withdraw(amount)

    # Mint YCRV
    if _output_token == YCRV:
        IYCRV(YCRV).burn_to_mint(amount, _recipient)
        assert amount >= _min_out # dev: min out
        return amount
    IYCRV(YCRV).burn_to_mint(amount)
    return self._convert_to_output(_output_token, amount, _min_out, _recipient)
    
@internal
def _convert_crv(amount: uint256) -> uint256:
    output_amount: uint256 = Curve(POOL_V2).get_dy(0, 1, amount)
    buffered_amount: uint256 = amount + (amount * self.mint_buffer / 10_000)
    if output_amount > buffered_amount:
        return Curve(POOL_V2).exchange(0, 1, amount, 0)
    else:
        return IYCRV(YCRV).mint(amount)

@internal
def _lp(_amounts: uint256[2]) -> uint256:
    return Curve(POOL_V2).add_liquidity(_amounts, 0)

@internal
def _convert_to_output(_output_token: address, amount: uint256, _min_out: uint256, _recipient: address) -> uint256:
    # dev: output token and amount values have already been validated
    if _output_token == STYCRV:
        amount_out: uint256 = Vault(STYCRV).deposit(amount, _recipient)
        assert amount_out >= _min_out # dev: min out
        return amount_out
    assert _output_token == LPYCRV_V2
    amount_out: uint256 = Vault(LPYCRV_V2).deposit(self._lp([0, amount]), _recipient)
    assert amount_out >= _min_out # dev: min out
    return amount_out

@view
@internal
def _relative_price_from_legacy(_input_token: address, _output_token: address, _amount_in: uint256) -> uint256:
    if _amount_in == 0:
        return 0

    amount: uint256 = _amount_in
    if _input_token == YVBOOST:
        amount = Vault(YVBOOST).pricePerShare() * amount / 10 ** 18
    
    if _output_token == YCRV:
        return amount
    elif _output_token == STYCRV:
        return amount * 10 ** 18 / Vault(STYCRV).pricePerShare()
    assert _output_token == LPYCRV_V2
    lp_amount: uint256 = amount * 10 ** 18 / Curve(POOL_V2).get_virtual_price()
    return lp_amount * 10 ** 18 / Vault(LPYCRV_V2).pricePerShare()

@view
@external
def relative_price(_input_token: address, _output_token: address, _amount_in: uint256) -> uint256:
    """
    @notice 
        This returns a rough amount of output assuming there's a balanced liquidity pool.
        The return value should not be relied upon for an accurate estimate for actual output amount.
    @dev 
        This value should only be used to compare against "calc_expected_out_from_legacy" to project price impact.
    @param _input_token The token to migrate from
    @param _output_token The yCRV token to migrate to
    @param _amount_in Amount of input token to migrate, defaults to full balance
    @return Amount of output token transferred to the _recipient
    """
    assert _output_token in OUTPUT_TOKENS  # dev: invalid output token address
    if _input_token in LEGACY_TOKENS:
        return self._relative_price_from_legacy(_input_token, _output_token, _amount_in)
    assert  (
        _input_token in [CRV , CVXCRV , LPYCRV_V1 , POOL_V1, POOL_V2]
        or _input_token in OUTPUT_TOKENS
    ) # dev: invalid input token address

    if _amount_in == 0:
        return 0
    amount: uint256 = _amount_in
    if _input_token == _output_token:
        return _amount_in
    elif _input_token == STYCRV:
        amount = Vault(STYCRV).pricePerShare() * amount / 10 ** 18
    elif _input_token in [LPYCRV_V2, POOL_V2]:
        if _input_token == LPYCRV_V2:
            amount = Vault(LPYCRV_V2).pricePerShare() * amount / 10 ** 18
        amount = Curve(POOL_V2).get_virtual_price() * amount / 10 ** 18
    elif _input_token in [LPYCRV_V1, POOL_V1]:
        assert _output_token == LPYCRV_V2
        if _input_token == LPYCRV_V1:
            amount = Vault(LPYCRV_V1).pricePerShare() * amount / 10 ** 18
        amount = Curve(POOL_V1).get_virtual_price() * amount / 10 ** 18

    if _output_token == YCRV:
        return amount
    elif _output_token == STYCRV:
        return amount * 10 ** 18 / Vault(STYCRV).pricePerShare()

    assert _output_token == LPYCRV_V2
    lp_amount: uint256 = amount * 10 ** 18 / Curve(POOL_V2).get_virtual_price()
    return lp_amount * 10 ** 18 / Vault(LPYCRV_V2).pricePerShare()

@view
@internal
def _calc_expected_out_from_legacy(_input_token: address, _output_token: address, _amount_in: uint256) -> uint256:
    if _amount_in == 0:
        return 0
    amount: uint256 = _amount_in
    if _input_token == YVBOOST:
        amount = Vault(YVBOOST).pricePerShare() * amount / 10 ** 18
    
    if _output_token == YCRV:
        return amount
    elif _output_token == STYCRV:
        return amount * 10 ** 18 / Vault(STYCRV).pricePerShare()
    assert _output_token == LPYCRV_V2
    lp_amount: uint256 = Curve(POOL_V2).calc_token_amount([0, amount], True)
    return lp_amount * 10 ** 18 / Vault(LPYCRV_V2).pricePerShare()

@view
@external
def calc_expected_out(_input_token: address, _output_token: address, _amount_in: uint256) -> uint256:
    """
    @notice 
        This returns the expected amount of tokens output after conversion.
    @dev
        This calculation accounts for slippage, but not fees.
        Needed to prevent front-running, do not rely on it for precise calculations!
    @param _input_token A valid input token address to migrate from
    @param _output_token The yCRV token address to migrate to
    @param _amount_in Amount of input token to migrate, defaults to full balance
    @return Amount of output token transferred to the _recipient
    """
    assert _output_token in OUTPUT_TOKENS  # dev: invalid output token address
    assert _input_token != _output_token
    if _input_token in LEGACY_TOKENS:
        return self._calc_expected_out_from_legacy(_input_token, _output_token, _amount_in)
    amount: uint256 = _amount_in

    if _input_token == CRV or _input_token == CVXCRV:
        if _input_token == CVXCRV:
            amount = Curve(CVXCRVPOOL).get_dy(1, 0, amount)
        output_amount: uint256 = Curve(POOL_V2).get_dy(0, 1, amount)
        buffered_amount: uint256 = amount + (amount * self.mint_buffer / 10_000)
        if output_amount > buffered_amount: # dev: ensure calculation uses buffer
            amount = output_amount
    elif _input_token in [LPYCRV_V1, POOL_V1]:
        assert _output_token == LPYCRV_V2
        if _input_token == LPYCRV_V1:
            amount = Vault(LPYCRV_V1).pricePerShare() * amount / 10 ** 18
        amounts: uint256[2] = self.assets_amounts_from_lp(POOL_V1, amount)
        amount = Curve(POOL_V2).calc_token_amount(amounts, True) # Deposit
        return amount * 10 ** 18 / Vault(LPYCRV_V2).pricePerShare()
    else:
        assert _input_token in OUTPUT_TOKENS or _input_token == POOL_V2   # dev: invalid input token address
    
    if amount == 0:
        return 0

    if _input_token == STYCRV:
        amount = Vault(STYCRV).pricePerShare() * amount / 10 ** 18
    elif _input_token in [LPYCRV_V2, POOL_V2]:
        if _input_token == LPYCRV_V2:
            amount = Vault(LPYCRV_V2).pricePerShare() * amount / 10 ** 18
        amount = Curve(POOL_V2).calc_withdraw_one_coin(amount, 1)

    if _output_token == YCRV:
        return amount
    elif _output_token == STYCRV:
        return amount * 10 ** 18 / Vault(STYCRV).pricePerShare()
    
    assert _output_token == LPYCRV_V2
    lp_amount: uint256 = Curve(POOL_V2).calc_token_amount([0, amount], True)
    return lp_amount * 10 ** 18 / Vault(LPYCRV_V2).pricePerShare()

@view
@internal
def assets_amounts_from_lp(pool: address, _lp_amount: uint256) -> uint256[2]:
    supply: uint256 = Curve(pool).totalSupply()
    ratio: uint256 = _lp_amount * 10 ** 18 / supply
    balance0: uint256 = Curve(pool).balances(0) * ratio / 10 ** 18
    balance1: uint256 = Curve(pool).balances(1) * ratio / 10 ** 18
    return [balance0, balance1]

@external
def sweep(_token: address, _amount: uint256 = max_value(uint256)):
    assert msg.sender == self.sweep_recipient
    value: uint256 = _amount
    if value == max_value(uint256):
        value = ERC20(_token).balanceOf(self)
    assert ERC20(_token).transfer(self.sweep_recipient, value, default_return_value=True)

@external
def set_mint_buffer(_new_buffer: uint256):
    """
    @notice 
        Allow SWEEP_RECIPIENT to express a preference towards minting over swapping 
        to save gas and improve overall locked position
    @param _new_buffer New percentage (expressed in BPS) to nudge zaps towards minting
    """
    assert msg.sender == self.sweep_recipient
    assert _new_buffer < 500 # dev: buffer too high
    self.mint_buffer = _new_buffer
    log UpdateMintBuffer(_new_buffer)

@external
def set_sweep_recipient(_proposed_sweep_recipient: address):
    assert msg.sender == self.sweep_recipient
    self.sweep_recipient = _proposed_sweep_recipient
    log UpdateSweepRecipient(_proposed_sweep_recipient)

Contract Security Audit

Contract ABI

[{"name":"UpdateSweepRecipient","inputs":[{"name":"sweep_recipient","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"UpdateMintBuffer","inputs":[{"name":"mint_buffer","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"nonpayable","type":"constructor","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"zap","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"zap","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"},{"name":"_amount_in","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"zap","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"},{"name":"_amount_in","type":"uint256"},{"name":"_min_out","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"zap","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"},{"name":"_amount_in","type":"uint256"},{"name":"_min_out","type":"uint256"},{"name":"_recipient","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"relative_price","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"},{"name":"_amount_in","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"calc_expected_out","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"},{"name":"_amount_in","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"sweep","inputs":[{"name":"_token","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"sweep","inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_mint_buffer","inputs":[{"name":"_new_buffer","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_sweep_recipient","inputs":[{"name":"_proposed_sweep_recipient","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"LEGACY_TOKENS","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"OUTPUT_TOKENS","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"sweep_recipient","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"mint_buffer","inputs":[],"outputs":[{"name":"","type":"uint256"}]}]

612601515034612a185773feb4acf3df3cdea7399794d0869ef76a6efaff525f55600f60015563095ea7b360405273fcc5c47be19d06bf83eb04298b026f81069ff65b6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f73c5bddf9843308380375a611c18b50fb9341f502a5af1610095573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b36040527327b5739e22ad9033bcbf192059122d163b60349d6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1610123573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b36040527399f5acc8ec2da2bc0771c32814eff52b712de1e56060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af16101b1573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b3604052736e9455d109202b426169f0d8f01a3332dae160f36060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af161023f573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b36040527399f5acc8ec2da2bc0771c32814eff52b712de1e56060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f73d533a949740bb3306d119cc777fa900ba034cd525af16102cd573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b360405273fcc5c47be19d06bf83eb04298b026f81069ff65b6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f73d533a949740bb3306d119cc777fa900ba034cd525af161035b573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b3604052739d0464996170c6b9e75eed71c68b99ddedf279e86060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f7362b9c7356a2dc64a1969e19c23e4f579f9810aa75af16103e9573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185773c5bddf9843308380375a611c18b50fb9341f502a61258152739d409a0a012cfba9b15f6d4b36ac57a46966ab9a6125a15273fcc5c47be19d06bf83eb04298b026f81069ff65b6125c1527327b5739e22ad9033bcbf192059122d163b60349d6125e152736e9455d109202b426169f0d8f01a3332dae160f36126015261258161049661000039612621610000f36003361161000c57611b20565b5f3560e01c3461257057633a08fefb811861004a5760243610612570576020600435600181116125705760051b612581015f395f5160405260206040f35b6323b03ca881186100815760243610612570576020600435600281116125705760051b604001612581015f395f5160405260206040f35b63168861678118610097575f5460405260206040f35b6341ba5aa181186100ae5760015460405260206040f35b6306fdde03811861012d57602080608052600b6040527f59435256205a617020763300000000000000000000000000000000000000000060605260408160800181516020830160208301815181525050808252508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f35b6359ae02dd81186101745760443610612570577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103c0525f6103e05233610400526101ed565b6347ce3e69811861019d5760643610612570576044356103c0525f6103e05233610400526101ed565b63df4fd97081186101c2576084361061257057604060446103c03733610400526101ed565b635178790581186109dc5760a4361061257057604060446103c0376084358060a01c61257057610400525b6004358060a01c61257057610380526024358060a01c612570576103a0526103c05115612570576103a0516103805114612570576103a0515f610420525f6003905b60208160051b604001612581015f395f5183186102515760016104205261025c565b60010181811861022f575b505061042051905015612570576103c0516104205261042051196102b857610380516370a082316104405233610460526020610440602461045c845afa6102a5573d5f5f3e3d5ffd5b60203d1061257057610440905051610420525b610380515f610440525f6002905b60208160051b612581015f395f5183186102e5576001610440526102f0565b6001018181186102c6575b50506104405190506107625773d533a949740bb3306d119cc777fa900ba034cd52610380511861032157600161033d565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa76103805118155b610669576103805173c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610367576001610380565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b905061045657610380515f610440525f6003905b60208160051b604001612581015f395f5183186103b6576001610440526103c1565b600101818118610394575b50506104405190506103ed577399f5acc8ec2da2bc0771c32814eff52b712de1e56103805118156103f0565b60015b1561257057610380516323b872dd6104405233610460523061048052610420516104a0526020610440606461045c5f855af161042e573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104c0526104c0905051156125705761079f565b736e9455d109202b426169f0d8f01a3332dae160f36103a0511861257057610380516323b872dd610460523361048052306104a052610420516104c0526020610460606461047c5f855af16104ad573d5f5f3e3d5ffd5b60203d1061257057610460518060011c612570576104e0526104e0905051156125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e610380511861053e57632e1a7d4d6104605261042051610480526020610460602461047c5f73c97232527b62efb0d8ed38cf3ea103a6cca4037e5af161052d573d5f5f3e3d5ffd5b60203d106125705761046051610420525b635b36389c6104a052610420516104c0526040366104e03760406104a060646104bc5f73453d92c7d4263201c69aacfaf589ed14202d83a45af1610584573d5f5f3e3d5ffd5b60403d10612570576104a080516104605260208101516104805250630b4c7e4d6104a052610460516104c052610480516104e0525f6105005260206104a060646104bc5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af16105eb573d5f5f3e3d5ffd5b60203d10612570576104a05161042052636e553f656104a052610420516104c052610400516104e05260206104a060446104bc5f736e9455d109202b426169f0d8f01a3332dae160f35af1610642573d5f5f3e3d5ffd5b60203d10612570576104a051610420526103e05161042051106125705760206104206109da565b610380516323b872dd6104405233610460523061048052610420516104a0526020610440606461045c5f855af16106a2573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104c0526104c090505115612570577362b9c7356a2dc64a1969e19c23e4f579f9810aa7610380511861074357633df02124610440526001610460525f61048052610420516104a0525f6104c0526020610440608461045c5f739d0464996170c6b9e75eed71c68b99ddedf279e85af1610732573d5f5f3e3d5ffd5b60203d106125705761044051610420525b61042051604052610755610440611e84565b610440516104205261079f565b602061038051610220526103a0516102405261042051610260526103e05161028052610400516102a052610797610460611ca8565b6104606109da565b7327b5739e22ad9033bcbf192059122d163b60349d610380511861081157632e1a7d4d6104405261042051610460526020610440602461045c5f7327b5739e22ad9033bcbf192059122d163b60349d5af16107fc573d5f5f3e3d5ffd5b60203d10612570576104405161042052610920565b61038051736e9455d109202b426169f0d8f01a3332dae160f38118610837576001610850565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b90501561092057736e9455d109202b426169f0d8f01a3332dae160f361038051186108c557632e1a7d4d6104605261042051610480526020610460602461047c5f736e9455d109202b426169f0d8f01a3332dae160f35af16108b4573d5f5f3e3d5ffd5b60203d106125705761046051610420525b631a4d01d261046052610420516104805260016104a0525f6104c0526020610460606461047c5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af161090f573d5f5f3e3d5ffd5b60203d106125705761046051610420525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6103a051186109a9576103e0516104205110612570576103a05163a9059cbb61044052610400516104605261042051610480526020610440604461045c5f855af1610982573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104a0526104a0505060206104206109da565b60206103a0516101005261042051610120526103e0516101405261040051610160526109d6610440611b78565b6104405bf35b636ce068cf81186110f55760643610612570576004358060a01c61257057610120526024358060a01c6125705761014052610140515f610160525f6003905b60208160051b604001612581015f395f518318610a3d57600161016052610a48565b600101818118610a1b575b50506101605190501561257057610120515f610160525f6002905b60208160051b612581015f395f518318610a8257600161016052610a8d565b600101818118610a63575b505061016051905015610ac35760206101205160405261014051606052604435608052610abb610180611fbb565b6101806110f3565b6101205173d533a949740bb3306d119cc777fa900ba034cd528118610ae9576001610b68565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa78118610b0b576001610b68565b73c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610b2d576001610b68565b73453d92c7d4263201c69aacfaf589ed14202d83a48118610b4f576001610b68565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b9050610bb657610120515f610180525f6003905b60208160051b604001612581015f395f518318610b9e57600161018052610ba9565b600101818118610b7c575b5050610180519050610bb9565b60015b1561257057604435610bd4575f6101605260206101606110f3565b60443561016052610140516101205118610bf9576044356101805260206101806110f3565b7327b5739e22ad9033bcbf192059122d163b60349d6101205118610c87576399530b06610180526020610180600461019c7327b5739e22ad9033bcbf192059122d163b60349d5afa610c4d573d5f5f3e3d5ffd5b60203d106125705761018051610160518082028115838383041417156125705790509050670de0b6b3a76400008104905061016052610f20565b61012051736e9455d109202b426169f0d8f01a3332dae160f38118610cad576001610cc6565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b9050610e2a576101205173c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610cf2576001610d0b565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b905015610f2057736e9455d109202b426169f0d8f01a3332dae160f361014051186125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e6101205118610dba576399530b066101a05260206101a060046101bc73c97232527b62efb0d8ed38cf3ea103a6cca4037e5afa610d84573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b63bb7b8b806101a05260206101a060046101bc73453d92c7d4263201c69aacfaf589ed14202d83a45afa610df0573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a76400008104905061016052610f20565b736e9455d109202b426169f0d8f01a3332dae160f36101205118610eb4576399530b066101a05260206101a060046101bc736e9455d109202b426169f0d8f01a3332dae160f35afa610e7e573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b63bb7b8b806101a05260206101a060046101bc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa610eea573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6101405118610f485760206101606110f3565b7327b5739e22ad9033bcbf192059122d163b60349d6101405118610fe55761016051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b06610180526020610180600461019c7327b5739e22ad9033bcbf192059122d163b60349d5afa610fbe573d5f5f3e3d5ffd5b60203d106125705761018051801561257057808204905090506101c05260206101c06110f3565b736e9455d109202b426169f0d8f01a3332dae160f361014051186125705761016051670de0b6b3a7640000810281670de0b6b3a764000082041861257057905063bb7b8b806101a05260206101a060046101bc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61105b573d5f5f3e3d5ffd5b60203d10612570576101a051801561257057808204905090506101805261018051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101a05260206101a060046101bc736e9455d109202b426169f0d8f01a3332dae160f35afa6110d0573d5f5f3e3d5ffd5b60203d10612570576101a051801561257057808204905090506101e05260206101e05bf35b6305d465ff81186119515760643610612570576004358060a01c61257057610160526024358060a01c6125705761018052610180515f6101a0525f6003905b60208160051b604001612581015f395f5183186111565760016101a052611161565b600101818118611134575b50506101a0519050156125705761018051610160511461257057610160515f6101a0525f6002905b60208160051b612581015f395f5183186111a85760016101a0526111b3565b600101818118611189575b50506101a0519050156111e957602061016051604052610180516060526044356080526111e16101c061220b565b6101c061194f565b6044356101a05273d533a949740bb3306d119cc777fa900ba034cd526101605118611215576001611231565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa76101605118155b6114ae576101605173c97232527b62efb0d8ed38cf3ea103a6cca4037e811861125b576001611274565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b90506112ee57610160515f6101c0525f6003905b60208160051b604001612581015f395f5183186112aa5760016101c0526112b5565b600101818118611288575b50506101c05190506112e1577399f5acc8ec2da2bc0771c32814eff52b712de1e56101605118156112e4565b60015b15612570576115ce565b736e9455d109202b426169f0d8f01a3332dae160f361018051186125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e6101605118611396576399530b066101e05260206101e060046101fc73c97232527b62efb0d8ed38cf3ea103a6cca4037e5afa611360573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a0525b73453d92c7d4263201c69aacfaf589ed14202d83a46040526101a0516060526113c061022061243f565b61022080516101e0526020810151610200525063ed8e84f3610220526101e0516102405261020051610260526001610280526020610220606461023c7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61141f573d5f5f3e3d5ffd5b60203d1061257057610220516101a0526101a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b06610220526020610220600461023c736e9455d109202b426169f0d8f01a3332dae160f35afa611487573d5f5f3e3d5ffd5b60203d1061257057610220518015612570578082049050905061026052602061026061194f565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa7610160511861152657635e0d443f6101c05260016101e0525f610200526101a0516102205260206101c060646101dc739d0464996170c6b9e75eed71c68b99ddedf279e85afa611515573d5f5f3e3d5ffd5b60203d10612570576101c0516101a0525b635e0d443f6101e0525f610200526001610220526101a0516102405260206101e060646101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61156f573d5f5f3e3d5ffd5b60203d10612570576101e0516101c0526101a0516101a05160015480820281158383830414171561257057905090506127108104905080820182811061257057905090506101e0526101e0516101c05111156115ce576101c0516101a0525b6101a0516115e5575f6101c05260206101c061194f565b7327b5739e22ad9033bcbf192059122d163b60349d6101605118611673576399530b066101c05260206101c060046101dc7327b5739e22ad9033bcbf192059122d163b60349d5afa611639573d5f5f3e3d5ffd5b60203d10612570576101c0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a052611798565b61016051736e9455d109202b426169f0d8f01a3332dae160f381186116995760016116b2565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b90501561179857736e9455d109202b426169f0d8f01a3332dae160f36101605118611743576399530b066101e05260206101e060046101fc736e9455d109202b426169f0d8f01a3332dae160f35afa61170d573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a0525b63cc2b27d76101e0526101a0516102005260016102205260206101e060446101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa611787573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b61018051186117c05760206101a061194f565b7327b5739e22ad9033bcbf192059122d163b60349d610180511861185d576101a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101c05260206101c060046101dc7327b5739e22ad9033bcbf192059122d163b60349d5afa611836573d5f5f3e3d5ffd5b60203d10612570576101c0518015612570578082049050905061020052602061020061194f565b736e9455d109202b426169f0d8f01a3332dae160f361018051186125705763ed8e84f36101e0525f610200526101a0516102205260016102405260206101e060646101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa6118c4573d5f5f3e3d5ffd5b60203d10612570576101e0516101c0526101c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101e05260206101e060046101fc736e9455d109202b426169f0d8f01a3332dae160f35afa61192c573d5f5f3e3d5ffd5b60203d10612570576101e051801561257057808204905090506102205260206102205bf35b6301681a62811861198d5760243610612570577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6060526119a7565b636ea056a98118611a6c5760443610612570576024356060525b6004358060a01c612570576040525f5433186125705760605160805260805119611a02576040516370a0823160a0523060c052602060a0602460bc845afa6119f1573d5f5f3e3d5ffd5b60203d106125705760a09050516080525b60405163a9059cbb60a0525f5460c05260805160e052602060a0604460bc5f855af1611a30573d5f5f3e3d5ffd5b3d611a4757803b1561257057600161010052611a5f565b60203d106125705760a0518060011c61257057610100525b6101009050511561257057005b63b0af55388118611ac65760243610612570575f543318612570576101f360043511612570576004356001557fdedaaea5af1f142f6431a3f66596f94f1507d65410cd17ffce206a83e3e7c80660043560405260206040a1005b63304ad6628118611b1e5760243610612570576004358060a01c612570576040525f543318612570576040515f556040517f9e3ed1b4f392c7b0c322e2f6fd1bc5889ab0a01ca356a09f62332acea07beca15f6060a2005b505b5f5ffd5b630b4c7e4d60805260405160a05260605160c0525f60e052602060806064609c5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af1611b68573d5f5f3e3d5ffd5b60203d1061257057608051815250565b7327b5739e22ad9033bcbf192059122d163b60349d6101005118611c0657636e553f656101a052610120516101c052610160516101e05260206101a060446101bc5f7327b5739e22ad9033bcbf192059122d163b60349d5af1611bdd573d5f5f3e3d5ffd5b60203d10612570576101a051610180526101405161018051106125705761018051815250611ca6565b736e9455d109202b426169f0d8f01a3332dae160f3610100511861257057636e553f656101c0525f60405261012051606052611c436101a0611b24565b6101a0516101e052610160516102005260206101c060446101dc5f736e9455d109202b426169f0d8f01a3332dae160f35af1611c81573d5f5f3e3d5ffd5b60203d10612570576101c0516101805261014051610180511061257057610180518152505b565b610260516102c052610220516323b872dd6102e052336103005230610320526102c0516103405260206102e060646102fc5f855af1611ce9573d5f5f3e3d5ffd5b60203d10612570576102e0518060011c61257057610360526103609050511561257057739d409a0a012cfba9b15f6d4b36ac57a46966ab9a6102205118611d7a57632e1a7d4d6102e0526102c0516103005260206102e060246102fc5f739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5af1611d69573d5f5f3e3d5ffd5b60203d10612570576102e0516102c0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6102405118611e045763795c25216102e0526102c051610300526102a0516103205260206102e060446102fc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611ddf573d5f5f3e3d5ffd5b60203d10612570576102e050610280516102c05110612570576102c051815250611e82565b63dddb637f6102e0526102c0516103005260206102e060246102fc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611e43573d5f5f3e3d5ffd5b60203d10612570576102e05061024051610100526102c0516101205261028051610140526102a05161016052611e7a6102e0611b78565b6102e0518152505b565b635e0d443f6080525f60a052600160c05260405160e052602060806064609c7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa611ec6573d5f5f3e3d5ffd5b60203d1061257057608051606052604051604051600154808202811583838304141715612570579050905061271081049050808201828110612570579050905060805260805160605111611f615763a0712d6860a05260405160c052602060a0602460bc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611f4e573d5f5f3e3d5ffd5b60203d106125705760a051815250611fb9565b633df0212460a0525f60c052600160e052604051610100525f61012052602060a0608460bc5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af1611faa573d5f5f3e3d5ffd5b60203d106125705760a0518152505b565b608051611fcb575f815250612209565b60805160a052739d409a0a012cfba9b15f6d4b36ac57a46966ab9a60405118612054576399530b0660c052602060c0600460dc739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5afa612021573d5f5f3e3d5ffd5b60203d106125705760c05160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6060511861207c5760a051815250612209565b7327b5739e22ad9033bcbf192059122d163b60349d6060511861210d5760a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660c052602060c0600460dc7327b5739e22ad9033bcbf192059122d163b60349d5afa6120ed573d5f5f3e3d5ffd5b60203d106125705760c05180156125705780820490509050815250612209565b736e9455d109202b426169f0d8f01a3332dae160f3606051186125705760a051670de0b6b3a7640000810281670de0b6b3a764000082041861257057905063bb7b8b8060e052602060e0600460fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61217e573d5f5f3e3d5ffd5b60203d106125705760e0518015612570578082049050905060c05260c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660e052602060e0600460fc736e9455d109202b426169f0d8f01a3332dae160f35afa6121ed573d5f5f3e3d5ffd5b60203d106125705760e051801561257057808204905090508152505b565b60805161221b575f81525061243d565b60805160a052739d409a0a012cfba9b15f6d4b36ac57a46966ab9a604051186122a4576399530b0660c052602060c0600460dc739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5afa612271573d5f5f3e3d5ffd5b60203d106125705760c05160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b606051186122cc5760a05181525061243d565b7327b5739e22ad9033bcbf192059122d163b60349d6060511861235d5760a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660c052602060c0600460dc7327b5739e22ad9033bcbf192059122d163b60349d5afa61233d573d5f5f3e3d5ffd5b60203d106125705760c0518015612570578082049050905081525061243d565b736e9455d109202b426169f0d8f01a3332dae160f3606051186125705763ed8e84f360e0525f6101005260a05161012052600161014052602060e0606460fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa6123bf573d5f5f3e3d5ffd5b60203d106125705760e05160c05260c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660e052602060e0600460fc736e9455d109202b426169f0d8f01a3332dae160f35afa612421573d5f5f3e3d5ffd5b60203d106125705760e051801561257057808204905090508152505b565b6040516318160ddd60a052602060a0600460bc845afa612461573d5f5f3e3d5ffd5b60203d106125705760a0905051608052606051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506080518015612570578082049050905060a052604051634903b0d160e0525f61010052602060e0602460fc845afa6124cc573d5f5f3e3d5ffd5b60203d106125705760e090505160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060c052604051634903b0d1610100526001610120526020610100602461011c845afa61252b573d5f5f3e3d5ffd5b60203d106125705761010090505160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060e05260c051815260e051602082015250565b5f80fda165767970657283000309000b005b5f80fd

Deployed Bytecode

0x6003361161000c57611b20565b5f3560e01c3461257057633a08fefb811861004a5760243610612570576020600435600181116125705760051b612581015f395f5160405260206040f35b6323b03ca881186100815760243610612570576020600435600281116125705760051b604001612581015f395f5160405260206040f35b63168861678118610097575f5460405260206040f35b6341ba5aa181186100ae5760015460405260206040f35b6306fdde03811861012d57602080608052600b6040527f59435256205a617020763300000000000000000000000000000000000000000060605260408160800181516020830160208301815181525050808252508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f35b6359ae02dd81186101745760443610612570577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103c0525f6103e05233610400526101ed565b6347ce3e69811861019d5760643610612570576044356103c0525f6103e05233610400526101ed565b63df4fd97081186101c2576084361061257057604060446103c03733610400526101ed565b635178790581186109dc5760a4361061257057604060446103c0376084358060a01c61257057610400525b6004358060a01c61257057610380526024358060a01c612570576103a0526103c05115612570576103a0516103805114612570576103a0515f610420525f6003905b60208160051b604001612581015f395f5183186102515760016104205261025c565b60010181811861022f575b505061042051905015612570576103c0516104205261042051196102b857610380516370a082316104405233610460526020610440602461045c845afa6102a5573d5f5f3e3d5ffd5b60203d1061257057610440905051610420525b610380515f610440525f6002905b60208160051b612581015f395f5183186102e5576001610440526102f0565b6001018181186102c6575b50506104405190506107625773d533a949740bb3306d119cc777fa900ba034cd52610380511861032157600161033d565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa76103805118155b610669576103805173c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610367576001610380565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b905061045657610380515f610440525f6003905b60208160051b604001612581015f395f5183186103b6576001610440526103c1565b600101818118610394575b50506104405190506103ed577399f5acc8ec2da2bc0771c32814eff52b712de1e56103805118156103f0565b60015b1561257057610380516323b872dd6104405233610460523061048052610420516104a0526020610440606461045c5f855af161042e573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104c0526104c0905051156125705761079f565b736e9455d109202b426169f0d8f01a3332dae160f36103a0511861257057610380516323b872dd610460523361048052306104a052610420516104c0526020610460606461047c5f855af16104ad573d5f5f3e3d5ffd5b60203d1061257057610460518060011c612570576104e0526104e0905051156125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e610380511861053e57632e1a7d4d6104605261042051610480526020610460602461047c5f73c97232527b62efb0d8ed38cf3ea103a6cca4037e5af161052d573d5f5f3e3d5ffd5b60203d106125705761046051610420525b635b36389c6104a052610420516104c0526040366104e03760406104a060646104bc5f73453d92c7d4263201c69aacfaf589ed14202d83a45af1610584573d5f5f3e3d5ffd5b60403d10612570576104a080516104605260208101516104805250630b4c7e4d6104a052610460516104c052610480516104e0525f6105005260206104a060646104bc5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af16105eb573d5f5f3e3d5ffd5b60203d10612570576104a05161042052636e553f656104a052610420516104c052610400516104e05260206104a060446104bc5f736e9455d109202b426169f0d8f01a3332dae160f35af1610642573d5f5f3e3d5ffd5b60203d10612570576104a051610420526103e05161042051106125705760206104206109da565b610380516323b872dd6104405233610460523061048052610420516104a0526020610440606461045c5f855af16106a2573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104c0526104c090505115612570577362b9c7356a2dc64a1969e19c23e4f579f9810aa7610380511861074357633df02124610440526001610460525f61048052610420516104a0525f6104c0526020610440608461045c5f739d0464996170c6b9e75eed71c68b99ddedf279e85af1610732573d5f5f3e3d5ffd5b60203d106125705761044051610420525b61042051604052610755610440611e84565b610440516104205261079f565b602061038051610220526103a0516102405261042051610260526103e05161028052610400516102a052610797610460611ca8565b6104606109da565b7327b5739e22ad9033bcbf192059122d163b60349d610380511861081157632e1a7d4d6104405261042051610460526020610440602461045c5f7327b5739e22ad9033bcbf192059122d163b60349d5af16107fc573d5f5f3e3d5ffd5b60203d10612570576104405161042052610920565b61038051736e9455d109202b426169f0d8f01a3332dae160f38118610837576001610850565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b90501561092057736e9455d109202b426169f0d8f01a3332dae160f361038051186108c557632e1a7d4d6104605261042051610480526020610460602461047c5f736e9455d109202b426169f0d8f01a3332dae160f35af16108b4573d5f5f3e3d5ffd5b60203d106125705761046051610420525b631a4d01d261046052610420516104805260016104a0525f6104c0526020610460606461047c5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af161090f573d5f5f3e3d5ffd5b60203d106125705761046051610420525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6103a051186109a9576103e0516104205110612570576103a05163a9059cbb61044052610400516104605261042051610480526020610440604461045c5f855af1610982573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104a0526104a0505060206104206109da565b60206103a0516101005261042051610120526103e0516101405261040051610160526109d6610440611b78565b6104405bf35b636ce068cf81186110f55760643610612570576004358060a01c61257057610120526024358060a01c6125705761014052610140515f610160525f6003905b60208160051b604001612581015f395f518318610a3d57600161016052610a48565b600101818118610a1b575b50506101605190501561257057610120515f610160525f6002905b60208160051b612581015f395f518318610a8257600161016052610a8d565b600101818118610a63575b505061016051905015610ac35760206101205160405261014051606052604435608052610abb610180611fbb565b6101806110f3565b6101205173d533a949740bb3306d119cc777fa900ba034cd528118610ae9576001610b68565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa78118610b0b576001610b68565b73c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610b2d576001610b68565b73453d92c7d4263201c69aacfaf589ed14202d83a48118610b4f576001610b68565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b9050610bb657610120515f610180525f6003905b60208160051b604001612581015f395f518318610b9e57600161018052610ba9565b600101818118610b7c575b5050610180519050610bb9565b60015b1561257057604435610bd4575f6101605260206101606110f3565b60443561016052610140516101205118610bf9576044356101805260206101806110f3565b7327b5739e22ad9033bcbf192059122d163b60349d6101205118610c87576399530b06610180526020610180600461019c7327b5739e22ad9033bcbf192059122d163b60349d5afa610c4d573d5f5f3e3d5ffd5b60203d106125705761018051610160518082028115838383041417156125705790509050670de0b6b3a76400008104905061016052610f20565b61012051736e9455d109202b426169f0d8f01a3332dae160f38118610cad576001610cc6565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b9050610e2a576101205173c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610cf2576001610d0b565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b905015610f2057736e9455d109202b426169f0d8f01a3332dae160f361014051186125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e6101205118610dba576399530b066101a05260206101a060046101bc73c97232527b62efb0d8ed38cf3ea103a6cca4037e5afa610d84573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b63bb7b8b806101a05260206101a060046101bc73453d92c7d4263201c69aacfaf589ed14202d83a45afa610df0573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a76400008104905061016052610f20565b736e9455d109202b426169f0d8f01a3332dae160f36101205118610eb4576399530b066101a05260206101a060046101bc736e9455d109202b426169f0d8f01a3332dae160f35afa610e7e573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b63bb7b8b806101a05260206101a060046101bc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa610eea573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6101405118610f485760206101606110f3565b7327b5739e22ad9033bcbf192059122d163b60349d6101405118610fe55761016051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b06610180526020610180600461019c7327b5739e22ad9033bcbf192059122d163b60349d5afa610fbe573d5f5f3e3d5ffd5b60203d106125705761018051801561257057808204905090506101c05260206101c06110f3565b736e9455d109202b426169f0d8f01a3332dae160f361014051186125705761016051670de0b6b3a7640000810281670de0b6b3a764000082041861257057905063bb7b8b806101a05260206101a060046101bc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61105b573d5f5f3e3d5ffd5b60203d10612570576101a051801561257057808204905090506101805261018051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101a05260206101a060046101bc736e9455d109202b426169f0d8f01a3332dae160f35afa6110d0573d5f5f3e3d5ffd5b60203d10612570576101a051801561257057808204905090506101e05260206101e05bf35b6305d465ff81186119515760643610612570576004358060a01c61257057610160526024358060a01c6125705761018052610180515f6101a0525f6003905b60208160051b604001612581015f395f5183186111565760016101a052611161565b600101818118611134575b50506101a0519050156125705761018051610160511461257057610160515f6101a0525f6002905b60208160051b612581015f395f5183186111a85760016101a0526111b3565b600101818118611189575b50506101a0519050156111e957602061016051604052610180516060526044356080526111e16101c061220b565b6101c061194f565b6044356101a05273d533a949740bb3306d119cc777fa900ba034cd526101605118611215576001611231565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa76101605118155b6114ae576101605173c97232527b62efb0d8ed38cf3ea103a6cca4037e811861125b576001611274565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b90506112ee57610160515f6101c0525f6003905b60208160051b604001612581015f395f5183186112aa5760016101c0526112b5565b600101818118611288575b50506101c05190506112e1577399f5acc8ec2da2bc0771c32814eff52b712de1e56101605118156112e4565b60015b15612570576115ce565b736e9455d109202b426169f0d8f01a3332dae160f361018051186125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e6101605118611396576399530b066101e05260206101e060046101fc73c97232527b62efb0d8ed38cf3ea103a6cca4037e5afa611360573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a0525b73453d92c7d4263201c69aacfaf589ed14202d83a46040526101a0516060526113c061022061243f565b61022080516101e0526020810151610200525063ed8e84f3610220526101e0516102405261020051610260526001610280526020610220606461023c7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61141f573d5f5f3e3d5ffd5b60203d1061257057610220516101a0526101a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b06610220526020610220600461023c736e9455d109202b426169f0d8f01a3332dae160f35afa611487573d5f5f3e3d5ffd5b60203d1061257057610220518015612570578082049050905061026052602061026061194f565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa7610160511861152657635e0d443f6101c05260016101e0525f610200526101a0516102205260206101c060646101dc739d0464996170c6b9e75eed71c68b99ddedf279e85afa611515573d5f5f3e3d5ffd5b60203d10612570576101c0516101a0525b635e0d443f6101e0525f610200526001610220526101a0516102405260206101e060646101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61156f573d5f5f3e3d5ffd5b60203d10612570576101e0516101c0526101a0516101a05160015480820281158383830414171561257057905090506127108104905080820182811061257057905090506101e0526101e0516101c05111156115ce576101c0516101a0525b6101a0516115e5575f6101c05260206101c061194f565b7327b5739e22ad9033bcbf192059122d163b60349d6101605118611673576399530b066101c05260206101c060046101dc7327b5739e22ad9033bcbf192059122d163b60349d5afa611639573d5f5f3e3d5ffd5b60203d10612570576101c0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a052611798565b61016051736e9455d109202b426169f0d8f01a3332dae160f381186116995760016116b2565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b90501561179857736e9455d109202b426169f0d8f01a3332dae160f36101605118611743576399530b066101e05260206101e060046101fc736e9455d109202b426169f0d8f01a3332dae160f35afa61170d573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a0525b63cc2b27d76101e0526101a0516102005260016102205260206101e060446101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa611787573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b61018051186117c05760206101a061194f565b7327b5739e22ad9033bcbf192059122d163b60349d610180511861185d576101a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101c05260206101c060046101dc7327b5739e22ad9033bcbf192059122d163b60349d5afa611836573d5f5f3e3d5ffd5b60203d10612570576101c0518015612570578082049050905061020052602061020061194f565b736e9455d109202b426169f0d8f01a3332dae160f361018051186125705763ed8e84f36101e0525f610200526101a0516102205260016102405260206101e060646101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa6118c4573d5f5f3e3d5ffd5b60203d10612570576101e0516101c0526101c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101e05260206101e060046101fc736e9455d109202b426169f0d8f01a3332dae160f35afa61192c573d5f5f3e3d5ffd5b60203d10612570576101e051801561257057808204905090506102205260206102205bf35b6301681a62811861198d5760243610612570577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6060526119a7565b636ea056a98118611a6c5760443610612570576024356060525b6004358060a01c612570576040525f5433186125705760605160805260805119611a02576040516370a0823160a0523060c052602060a0602460bc845afa6119f1573d5f5f3e3d5ffd5b60203d106125705760a09050516080525b60405163a9059cbb60a0525f5460c05260805160e052602060a0604460bc5f855af1611a30573d5f5f3e3d5ffd5b3d611a4757803b1561257057600161010052611a5f565b60203d106125705760a0518060011c61257057610100525b6101009050511561257057005b63b0af55388118611ac65760243610612570575f543318612570576101f360043511612570576004356001557fdedaaea5af1f142f6431a3f66596f94f1507d65410cd17ffce206a83e3e7c80660043560405260206040a1005b63304ad6628118611b1e5760243610612570576004358060a01c612570576040525f543318612570576040515f556040517f9e3ed1b4f392c7b0c322e2f6fd1bc5889ab0a01ca356a09f62332acea07beca15f6060a2005b505b5f5ffd5b630b4c7e4d60805260405160a05260605160c0525f60e052602060806064609c5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af1611b68573d5f5f3e3d5ffd5b60203d1061257057608051815250565b7327b5739e22ad9033bcbf192059122d163b60349d6101005118611c0657636e553f656101a052610120516101c052610160516101e05260206101a060446101bc5f7327b5739e22ad9033bcbf192059122d163b60349d5af1611bdd573d5f5f3e3d5ffd5b60203d10612570576101a051610180526101405161018051106125705761018051815250611ca6565b736e9455d109202b426169f0d8f01a3332dae160f3610100511861257057636e553f656101c0525f60405261012051606052611c436101a0611b24565b6101a0516101e052610160516102005260206101c060446101dc5f736e9455d109202b426169f0d8f01a3332dae160f35af1611c81573d5f5f3e3d5ffd5b60203d10612570576101c0516101805261014051610180511061257057610180518152505b565b610260516102c052610220516323b872dd6102e052336103005230610320526102c0516103405260206102e060646102fc5f855af1611ce9573d5f5f3e3d5ffd5b60203d10612570576102e0518060011c61257057610360526103609050511561257057739d409a0a012cfba9b15f6d4b36ac57a46966ab9a6102205118611d7a57632e1a7d4d6102e0526102c0516103005260206102e060246102fc5f739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5af1611d69573d5f5f3e3d5ffd5b60203d10612570576102e0516102c0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6102405118611e045763795c25216102e0526102c051610300526102a0516103205260206102e060446102fc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611ddf573d5f5f3e3d5ffd5b60203d10612570576102e050610280516102c05110612570576102c051815250611e82565b63dddb637f6102e0526102c0516103005260206102e060246102fc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611e43573d5f5f3e3d5ffd5b60203d10612570576102e05061024051610100526102c0516101205261028051610140526102a05161016052611e7a6102e0611b78565b6102e0518152505b565b635e0d443f6080525f60a052600160c05260405160e052602060806064609c7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa611ec6573d5f5f3e3d5ffd5b60203d1061257057608051606052604051604051600154808202811583838304141715612570579050905061271081049050808201828110612570579050905060805260805160605111611f615763a0712d6860a05260405160c052602060a0602460bc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611f4e573d5f5f3e3d5ffd5b60203d106125705760a051815250611fb9565b633df0212460a0525f60c052600160e052604051610100525f61012052602060a0608460bc5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af1611faa573d5f5f3e3d5ffd5b60203d106125705760a0518152505b565b608051611fcb575f815250612209565b60805160a052739d409a0a012cfba9b15f6d4b36ac57a46966ab9a60405118612054576399530b0660c052602060c0600460dc739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5afa612021573d5f5f3e3d5ffd5b60203d106125705760c05160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6060511861207c5760a051815250612209565b7327b5739e22ad9033bcbf192059122d163b60349d6060511861210d5760a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660c052602060c0600460dc7327b5739e22ad9033bcbf192059122d163b60349d5afa6120ed573d5f5f3e3d5ffd5b60203d106125705760c05180156125705780820490509050815250612209565b736e9455d109202b426169f0d8f01a3332dae160f3606051186125705760a051670de0b6b3a7640000810281670de0b6b3a764000082041861257057905063bb7b8b8060e052602060e0600460fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61217e573d5f5f3e3d5ffd5b60203d106125705760e0518015612570578082049050905060c05260c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660e052602060e0600460fc736e9455d109202b426169f0d8f01a3332dae160f35afa6121ed573d5f5f3e3d5ffd5b60203d106125705760e051801561257057808204905090508152505b565b60805161221b575f81525061243d565b60805160a052739d409a0a012cfba9b15f6d4b36ac57a46966ab9a604051186122a4576399530b0660c052602060c0600460dc739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5afa612271573d5f5f3e3d5ffd5b60203d106125705760c05160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b606051186122cc5760a05181525061243d565b7327b5739e22ad9033bcbf192059122d163b60349d6060511861235d5760a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660c052602060c0600460dc7327b5739e22ad9033bcbf192059122d163b60349d5afa61233d573d5f5f3e3d5ffd5b60203d106125705760c0518015612570578082049050905081525061243d565b736e9455d109202b426169f0d8f01a3332dae160f3606051186125705763ed8e84f360e0525f6101005260a05161012052600161014052602060e0606460fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa6123bf573d5f5f3e3d5ffd5b60203d106125705760e05160c05260c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660e052602060e0600460fc736e9455d109202b426169f0d8f01a3332dae160f35afa612421573d5f5f3e3d5ffd5b60203d106125705760e051801561257057808204905090508152505b565b6040516318160ddd60a052602060a0600460bc845afa612461573d5f5f3e3d5ffd5b60203d106125705760a0905051608052606051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506080518015612570578082049050905060a052604051634903b0d160e0525f61010052602060e0602460fc845afa6124cc573d5f5f3e3d5ffd5b60203d106125705760e090505160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060c052604051634903b0d1610100526001610120526020610100602461011c845afa61252b573d5f5f3e3d5ffd5b60203d106125705761010090505160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060e05260c051815260e051602082015250565b5f80fda165767970657283000309000b000000000000000000000000c5bddf9843308380375a611c18b50fb9341f502a0000000000000000000000009d409a0a012cfba9b15f6d4b36ac57a46966ab9a000000000000000000000000fcc5c47be19d06bf83eb04298b026f81069ff65b00000000000000000000000027b5739e22ad9033bcbf192059122d163b60349d0000000000000000000000006e9455d109202b426169f0d8f01a3332dae160f3

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  ]

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.