ETH Price: $3,409.37 (+2.82%)
Gas: 3.96 Gwei

Contract

0xdc899AB992fbCFbac936CE5a5bC5A86a5d35A66a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Zap213993082024-12-14 7:37:359 days ago1734161855IN
0xdc899AB9...a5d35A66a
0 ETH0.002039778.24646603
Zap213682902024-12-09 23:40:1114 days ago1733787611IN
0xdc899AB9...a5d35A66a
0 ETH0.0065289526.39338724
Zap212900022024-11-29 1:13:5925 days ago1732842839IN
0xdc899AB9...a5d35A66a
0 ETH0.001502815.66842842
Zap212323692024-11-20 23:56:4733 days ago1732147007IN
0xdc899AB9...a5d35A66a
0 ETH0.002348228.99593647
Zap211029872024-11-02 22:38:2351 days ago1730587103IN
0xdc899AB9...a5d35A66a
0 ETH0.000800793.23748552
Zap210282702024-10-23 12:24:5961 days ago1729686299IN
0xdc899AB9...a5d35A66a
0 ETH0.0034698713.8
Zap208948272024-10-04 21:23:3580 days ago1728077015IN
0xdc899AB9...a5d35A66a
0 ETH0.002296569.13363266
Zap205839342024-08-22 11:46:11123 days ago1724327171IN
0xdc899AB9...a5d35A66a
0 ETH0.000524721.3841064
Zap205802892024-08-21 23:31:35124 days ago1724283095IN
0xdc899AB9...a5d35A66a
0 ETH0.000145280.81021521
Zap205118222024-08-12 10:05:11133 days ago1723457111IN
0xdc899AB9...a5d35A66a
0 ETH0.001316285.23497058
Zap205011252024-08-10 22:12:59135 days ago1723327979IN
0xdc899AB9...a5d35A66a
0 ETH0.000395891.03934661
Zap204737782024-08-07 2:42:11139 days ago1722998531IN
0xdc899AB9...a5d35A66a
0 ETH0.001974375.18330287
Zap201814292024-06-27 7:07:35179 days ago1719472055IN
0xdc899AB9...a5d35A66a
0 ETH0.00113924.53070591
Zap200981422024-06-15 15:39:23191 days ago1718465963IN
0xdc899AB9...a5d35A66a
0 ETH0.010134459.4269041
Zap200275092024-06-05 18:46:35201 days ago1717613195IN
0xdc899AB9...a5d35A66a
0 ETH0.0026464619.56521331
Zap200257642024-06-05 12:55:35201 days ago1717592135IN
0xdc899AB9...a5d35A66a
0 ETH0.0028737421.53024421
Zap200238532024-06-05 6:31:47201 days ago1717569107IN
0xdc899AB9...a5d35A66a
0 ETH0.000951237.82428436
Zap200100772024-06-03 8:22:47203 days ago1717402967IN
0xdc899AB9...a5d35A66a
0 ETH0.000917776.7850858
Zap200007892024-06-02 1:14:59205 days ago1717290899IN
0xdc899AB9...a5d35A66a
0 ETH0.000778244.63409619
Zap199995872024-06-01 21:14:11205 days ago1717276451IN
0xdc899AB9...a5d35A66a
0 ETH0.000187314.7388438
Zap199995872024-06-01 21:14:11205 days ago1717276451IN
0xdc899AB9...a5d35A66a
0 ETH0.000187314.7388438
Zap199995872024-06-01 21:14:11205 days ago1717276451IN
0xdc899AB9...a5d35A66a
0 ETH0.000641084.7388438
Zap199984122024-06-01 17:17:59205 days ago1717262279IN
0xdc899AB9...a5d35A66a
0 ETH0.0019406814.34742128
Zap199966212024-06-01 11:18:35205 days ago1717240715IN
0xdc899AB9...a5d35A66a
0 ETH0.000692094.12064806
Zap199881252024-05-31 6:48:23206 days ago1717138103IN
0xdc899AB9...a5d35A66a
0 ETH0.000906437.45520623
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:
default evmVersion, 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.