Contract 0xd6681e74eea20d196c15038c580f721ef2ab6320 17

 

Contract Overview

Balance:
1 wei

EtherValue:
Less Than $0.01 (@ $3,081.12/ETH)

Token:
Txn Hash Method
Block
From
To
Value
0x6b5dbb288509600b477c98fa982c75255ad5a538dfd60789ab61ceeda6902459Exchange132307082024-04-16 6:59:233 mins ago0x3cfdb0759752c1a1870fa0473a8cb6714098bbd7 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000075292970.018441284
0xa3ea2c4f91bf91431a8a5291fd67d21cf21f9f6d80bdd93b9614c5f1f87341cbExchange132304722024-04-16 6:51:3110 mins ago0xf98c438aa3fd380448d491e14cc16c5893d7ac7c IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000066410560.020257145
0xc156568fdcccc1190fb5ec5e4f70afec3f6bec3068135987f6afc0eab2403e5fExchange132304092024-04-16 6:49:2513 mins ago0xe3f0c9ed9d31cd905716069b72422a0449cc58b3 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000170781480.020580593
0x5d7e7036cbcb700bd481ff29ff91bfa32a73eea6ddd1cf098d4b81b596f917d8Exchange132303512024-04-16 6:47:2914 mins ago0xe3f0c9ed9d31cd905716069b72422a0449cc58b3 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000082574440.02024096
0x679db3fee8f657c1ed7065eaa441e5798b5d30051f56910983c7d34838524b30Exchange132300862024-04-16 6:38:3923 mins ago0x6270c8b34caa4841b0ca406b2d95f1bd0646ba25 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000041376680.020789585
0x78ab25311967bf9ef4d438f7094689120b7565566c5bdd236d79bb92d4e854a2Exchange132300582024-04-16 6:37:4324 mins ago0xb3801331b2b3d26a1587fd2da32a0dde01dce4b1 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.00000913540.021990623
0xf7c54bd9cc02c69281df431cfdd7845f3992f27db79aef0a9d3cb2b4c9526284Exchange132296512024-04-16 6:24:0938 mins ago0x2a41b6269129f0cbb22bc55390b503e3e185c10c IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000076092720.024149769
0x7ec1625e72eecff70896a36100c3819493037606ff657abaa0fdd4e14b634c15Exchange132293932024-04-16 6:15:3346 mins ago0x9c9f651513c783e74dbb1cc3b5e27d93e3d83337 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000127686440.023779046
0xb080cb47bbebcc4bae51f91ea3ae3d45a54697eefc77b47fbc3463c0c06d1f93Exchange132293172024-04-16 6:13:0149 mins ago0xb50c49d84fc86ae6c61ba11373654938f81b8bd7 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000044361250.02354303
0xbef17d7ce626d5f3be37cd16028acdbe20fe4a514b1b6d48b211c1761ac79aa7Exchange132291922024-04-16 6:08:5153 mins ago0xb50c49d84fc86ae6c61ba11373654938f81b8bd7 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.000004250270.022321976
0xb812af54717f18352bc5c711c3fce39d14306533f5a45b22140a73e887aee5ccExchange132291862024-04-16 6:08:3953 mins ago0x368a4d7e78f2c61d539c91ee8de3d06f1411d892 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200.001305489004413 ETH0.000010607030.020336728
0x609efc25995145f54edeed8f1c30264b70c70445c44c04468278a6fb77511c54Exchange132291012024-04-16 6:05:4956 mins ago0x947eb6339048a4f82e6cb793adfa08e2f8895571 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000139145190.019767172
0x8f88d4c249d2cde087a662e3eb4b03212e8b38cc7a9388758c2a21a81bdbff88Exchange132290362024-04-16 6:03:3958 mins ago0xea01fb473033ed0aea4f1ecc3c8bda41a2cf4134 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200.003 ETH0.000005815460.018206377
0x1ad039f5880d9d565aedecdd5b0d69e01e970a8a083cbd5a004e90596dd8c5f6Exchange132289942024-04-16 6:02:151 hr ago0x3e235dc635ec8e3dae763f84ca41941fd05bf8f0 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000078470660.018797466
0xa399e98d31fe39d93d0b870b435d0d5eae711aa587ef2c88f10e35a2d307c7ccExchange132288612024-04-16 5:57:491 hr 4 mins ago0x26b14413618ad35af8f7c1be8c494a71e06fad62 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000016508360.0197
0x01303210ea73b6ac42b4421cebac563180ad00077a7cc1901a3341e2c36c94f1Exchange132287722024-04-16 5:54:511 hr 7 mins ago0xeb19b9a6065bde3e77da8e576de6c253ec6c5739 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000036019250.017756972
0xd7ca0b31a0e1a91ceadf91c1b01a8b0cab83eded9bb2eb18429588bcb4bde221Exchange132286622024-04-16 5:51:111 hr 11 mins ago0xfb4000c06da551d3fa40f107769b0ddd7f562e0f IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000015437660.018271591
0x513d9dca3c7f2b8a5c6bc632ab97af234bff1059bc9d778a09ee5c46bff4f163Exchange132286112024-04-16 5:49:291 hr 12 mins ago0x43e4598bb0aaa36836fc5d586ca858e814f38b90 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000060103840.018814848
0x36deb4fb75f7cb995c4b0bb5eb398432ce57f74c776bfaa05a24c43f5b5f9c28Exchange132286102024-04-16 5:49:271 hr 13 mins ago0xfb4000c06da551d3fa40f107769b0ddd7f562e0f IN  0xd6681e74eea20d196c15038c580f721ef2ab63200.0017462 ETH0.0000019789790.018020373
0x8a036da7b85954a27455ec8f209c7a17fd2330326b14615593905f10c0a90bbbExchange132283662024-04-16 5:41:191 hr 21 mins ago0xdff6a8e27792a0b254f3413cd57ec9c792e31ad7 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000094712930.022711184
0x42fee7309a2d558febe1f83fb69b158c0b1cea2c1218281c8b6b547aeb45e4f1Exchange132282962024-04-16 5:38:591 hr 23 mins ago0xaaa93711ffbad69dd81b2586ad8945d803c91104 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.000010208420.023495509
0x896a1900d72a8580209ba1b8ec0b96c2e652ff2adda3d7655120640d0d30c5d3Exchange132282632024-04-16 5:37:531 hr 24 mins ago0x8099a73b8b2eafdecc90a0886730d48f014c82b7 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000038540550.022927082
0x709220641a70b20d620d67c63c05e0d8fa1a49f7fbf40eb3265457d8f1c767d7Exchange132281512024-04-16 5:34:091 hr 28 mins ago0x662e05c31ace0f5b2d4956292ab7dfea7a85d58a IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000122494850.026028912
0xd8522e9f88a460658a1010f203b6bd54dc7475686bbe85c48eda4769bd8263eeExchange132280362024-04-16 5:30:191 hr 32 mins ago0x67f0a1d6b40a3c09ee2232c01a6e89899bb8c3dd IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.0000091453520.028091716
0x325b304135ae661961684f38665c58ff29b899405ca664a1cc840792b1e94658Exchange132277132024-04-16 5:19:331 hr 42 mins ago0x29d08b58f6f971c6285721b7db695be8f22e61f7 IN  0xd6681e74eea20d196c15038c580f721ef2ab63200 ETH0.000014883530.036005374
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6b5dbb288509600b477c98fa982c75255ad5a538dfd60789ab61ceeda6902459132307082024-04-16 6:59:233 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab63200x3cfdb0759752c1a1870fa0473a8cb6714098bbd70.00116031690099796 ETH
0x6b5dbb288509600b477c98fa982c75255ad5a538dfd60789ab61ceeda6902459132307082024-04-16 6:59:233 mins ago 0x11c1fbd4b3de66bc0565779b35171a6cf3e71f59 0xd6681e74eea20d196c15038c580f721ef2ab63200.001160316900997961 ETH
0xc156568fdcccc1190fb5ec5e4f70afec3f6bec3068135987f6afc0eab2403e5f132304092024-04-16 6:49:2513 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab6320 0x6e53131f68a034873b6bfa15502af094ef0c58540.001169249723390785 ETH
0xc156568fdcccc1190fb5ec5e4f70afec3f6bec3068135987f6afc0eab2403e5f132304092024-04-16 6:49:2513 mins ago 0x11c1fbd4b3de66bc0565779b35171a6cf3e71f59 0xd6681e74eea20d196c15038c580f721ef2ab63200.001169249723390784 ETH
0x5d7e7036cbcb700bd481ff29ff91bfa32a73eea6ddd1cf098d4b81b596f917d8132303512024-04-16 6:47:2914 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab63200xe3f0c9ed9d31cd905716069b72422a0449cc58b30.000330674555098788 ETH
0x5d7e7036cbcb700bd481ff29ff91bfa32a73eea6ddd1cf098d4b81b596f917d8132303512024-04-16 6:47:2914 mins ago 0x11c1fbd4b3de66bc0565779b35171a6cf3e71f59 0xd6681e74eea20d196c15038c580f721ef2ab63200.000330674555098788 ETH
0x7ec1625e72eecff70896a36100c3819493037606ff657abaa0fdd4e14b634c15132293932024-04-16 6:15:3346 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab63200x9c9f651513c783e74dbb1cc3b5e27d93e3d833370.001850947365274523 ETH
0x7ec1625e72eecff70896a36100c3819493037606ff657abaa0fdd4e14b634c15132293932024-04-16 6:15:3346 mins ago 0x6e53131f68a034873b6bfa15502af094ef0c5854 0xd6681e74eea20d196c15038c580f721ef2ab63200.001850947365274523 ETH
0xb812af54717f18352bc5c711c3fce39d14306533f5a45b22140a73e887aee5cc132291862024-04-16 6:08:3953 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab6320 0x6e53131f68a034873b6bfa15502af094ef0c58540.001305489004413333 ETH
0x609efc25995145f54edeed8f1c30264b70c70445c44c04468278a6fb77511c54132291012024-04-16 6:05:4956 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab63200x947eb6339048a4f82e6cb793adfa08e2f88955710.001387966181708292 ETH
0x609efc25995145f54edeed8f1c30264b70c70445c44c04468278a6fb77511c54132291012024-04-16 6:05:4956 mins ago 0x6e53131f68a034873b6bfa15502af094ef0c5854 0xd6681e74eea20d196c15038c580f721ef2ab63200.001387966181708292 ETH
0x8f88d4c249d2cde087a662e3eb4b03212e8b38cc7a9388758c2a21a81bdbff88132290362024-04-16 6:03:3958 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab6320 0x6e53131f68a034873b6bfa15502af094ef0c58540.003 ETH
0xa399e98d31fe39d93d0b870b435d0d5eae711aa587ef2c88f10e35a2d307c7cc132288612024-04-16 5:57:491 hr 4 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab63200x26b14413618ad35af8f7c1be8c494a71e06fad620.166326347678574897 ETH
0xa399e98d31fe39d93d0b870b435d0d5eae711aa587ef2c88f10e35a2d307c7cc132288612024-04-16 5:57:491 hr 4 mins ago Wrapped Ether 0xd6681e74eea20d196c15038c580f721ef2ab63200.166326347678574897 ETH
0xd7ca0b31a0e1a91ceadf91c1b01a8b0cab83eded9bb2eb18429588bcb4bde221132286622024-04-16 5:51:111 hr 11 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab63200xfb4000c06da551d3fa40f107769b0ddd7f562e0f0.0017461 ETH
0xd7ca0b31a0e1a91ceadf91c1b01a8b0cab83eded9bb2eb18429588bcb4bde221132286622024-04-16 5:51:111 hr 11 mins ago Wrapped Ether 0xd6681e74eea20d196c15038c580f721ef2ab63200.0017461 ETH
0x513d9dca3c7f2b8a5c6bc632ab97af234bff1059bc9d778a09ee5c46bff4f163132286112024-04-16 5:49:291 hr 12 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab63200x43e4598bb0aaa36836fc5d586ca858e814f38b900.00489971552623751 ETH
0x513d9dca3c7f2b8a5c6bc632ab97af234bff1059bc9d778a09ee5c46bff4f163132286112024-04-16 5:49:291 hr 12 mins ago 0x6e53131f68a034873b6bfa15502af094ef0c5854 0xd6681e74eea20d196c15038c580f721ef2ab63200.00489971552623751 ETH
0x36deb4fb75f7cb995c4b0bb5eb398432ce57f74c776bfaa05a24c43f5b5f9c28132286102024-04-16 5:49:271 hr 13 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab6320Wrapped Ether0.0017462 ETH
0x709220641a70b20d620d67c63c05e0d8fa1a49f7fbf40eb3265457d8f1c767d7132281512024-04-16 5:34:091 hr 28 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab63200x662e05c31ace0f5b2d4956292ab7dfea7a85d58a0.001484270043089814 ETH
0x709220641a70b20d620d67c63c05e0d8fa1a49f7fbf40eb3265457d8f1c767d7132281512024-04-16 5:34:091 hr 28 mins ago 0x11c1fbd4b3de66bc0565779b35171a6cf3e71f59 0xd6681e74eea20d196c15038c580f721ef2ab63200.001484270043089814 ETH
0xe203cfc38d6dd2ac3437006dda2a5b71c035b9f59cb997bbbf50a031bbe607d9132278102024-04-16 5:22:471 hr 39 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab6320Wrapped Ether0.0848725 ETH
0xe203cfc38d6dd2ac3437006dda2a5b71c035b9f59cb997bbbf50a031bbe607d9132278102024-04-16 5:22:471 hr 39 mins ago 0x69460570c93f9de5e2edbc3052bf10125f0ca22d 0xd6681e74eea20d196c15038c580f721ef2ab63200.0848725 ETH
0x7d27789f68f426946d011abd11dedf5cbc10458b7cada869ef6e260a3d19b588132273102024-04-16 5:06:071 hr 56 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab6320Wrapped Ether0.59 ETH
0x9f6f391ba538c773d93d24ebad827582c940c2ea9dcaeda5e3c52a725962bc1b132267352024-04-16 4:46:572 hrs 15 mins ago 0xd6681e74eea20d196c15038c580f721ef2ab6320 0x6e53131f68a034873b6bfa15502af094ef0c58540.01 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CurveRouterSidechain v1.0

Compiler Version
vyper:0.3.7

Optimization Enabled:
N/A

Other Settings:
None license

Contract Source Code (Vyper language format)

# @version 0.3.7

"""
@title CurveRouterSidechain v1.0
@author Curve.Fi
@license Copyright (c) Curve.Fi, 2020-2023 - all rights reserved
@notice Performs up to 5 swaps in a single transaction, can do estimations with get_dy and get_dx
"""

from vyper.interfaces import ERC20

interface StablePool:
    def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): payable
    def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256): payable
    def get_dy(i: int128, j: int128, amount: uint256) -> uint256: view
    def get_dy_underlying(i: int128, j: int128, amount: uint256) -> uint256: view
    def coins(i: uint256) -> address: view
    def calc_withdraw_one_coin(token_amount: uint256, i: int128) -> uint256: view
    def remove_liquidity_one_coin(token_amount: uint256, i: int128, min_amount: uint256): nonpayable

interface CryptoPool:
    def exchange(i: uint256, j: uint256, dx: uint256, min_dy: uint256): payable
    def exchange_underlying(i: uint256, j: uint256, dx: uint256, min_dy: uint256): payable
    def get_dy(i: uint256, j: uint256, amount: uint256) -> uint256: view
    def get_dy_underlying(i: uint256, j: uint256, amount: uint256) -> uint256: view
    def calc_withdraw_one_coin(token_amount: uint256, i: uint256) -> uint256: view
    def remove_liquidity_one_coin(token_amount: uint256, i: uint256, min_amount: uint256): nonpayable

interface CryptoPoolETH:
    def exchange(i: uint256, j: uint256, dx: uint256, min_dy: uint256, use_eth: bool): payable

interface LendingBasePoolMetaZap:
    def exchange_underlying(pool: address, i: int128, j: int128, dx: uint256, min_dy: uint256): nonpayable

interface CryptoMetaZap:
    def get_dy(pool: address, i: uint256, j: uint256, dx: uint256) -> uint256: view
    def exchange(pool: address, i: uint256, j: uint256, dx: uint256, min_dy: uint256, use_eth: bool): payable

interface StablePool2Coins:
    def add_liquidity(amounts: uint256[2], min_mint_amount: uint256): payable
    def calc_token_amount(amounts: uint256[2], is_deposit: bool) -> uint256: view

interface CryptoPool2Coins:
    def calc_token_amount(amounts: uint256[2]) -> uint256: view

interface StablePool3Coins:
    def add_liquidity(amounts: uint256[3], min_mint_amount: uint256): payable
    def calc_token_amount(amounts: uint256[3], is_deposit: bool) -> uint256: view

interface CryptoPool3Coins:
    def calc_token_amount(amounts: uint256[3]) -> uint256: view

interface StablePool4Coins:
    def add_liquidity(amounts: uint256[4], min_mint_amount: uint256): payable
    def calc_token_amount(amounts: uint256[4], is_deposit: bool) -> uint256: view

interface CryptoPool4Coins:
    def calc_token_amount(amounts: uint256[4]) -> uint256: view

interface StablePool5Coins:
    def add_liquidity(amounts: uint256[5], min_mint_amount: uint256): payable
    def calc_token_amount(amounts: uint256[5], is_deposit: bool) -> uint256: view

interface CryptoPool5Coins:
    def calc_token_amount(amounts: uint256[5]) -> uint256: view

interface LendingStablePool3Coins:
    def add_liquidity(amounts: uint256[3], min_mint_amount: uint256, use_underlying: bool): payable
    def remove_liquidity_one_coin(token_amount: uint256, i: int128, min_amount: uint256, use_underlying: bool) -> uint256: nonpayable

interface Llamma:
    def get_dx(i: uint256, j: uint256, out_amount: uint256) -> uint256: view

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

# Calc zaps
interface StableCalc:
    def calc_token_amount(pool: address, token: address, amounts: uint256[10], n_coins: uint256, deposit: bool, use_underlying: bool) -> uint256: view
    def get_dx(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256) -> uint256: view
    def get_dx_underlying(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256) -> uint256: view
    def get_dx_meta(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256, base_pool: address) -> uint256: view
    def get_dx_meta_underlying(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256: view

interface CryptoCalc:
    def get_dx(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256) -> uint256: view
    def get_dx_meta_underlying(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256: view


struct AmountAndFee:
    amountReceived: uint256
    fee: uint256
    exchangeFeeRate: uint256


event Exchange:
    sender: indexed(address)
    receiver: indexed(address)
    route: address[11]
    swap_params: uint256[5][5]
    pools: address[5]
    in_amount: uint256
    out_amount: uint256


ETH_ADDRESS: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
WETH_ADDRESS: immutable(address)

# Calc zaps
STABLE_CALC: immutable(StableCalc)
CRYPTO_CALC: immutable(CryptoCalc)

is_approved: HashMap[address, HashMap[address, bool]]


@external
@payable
def __default__():
    pass


@external
def __init__( _weth: address, _stable_calc: address, _crypto_calc: address):
    WETH_ADDRESS = _weth
    STABLE_CALC = StableCalc(_stable_calc)
    CRYPTO_CALC = CryptoCalc(_crypto_calc)


@external
@payable
@nonreentrant('lock')
def exchange(
    _route: address[11],
    _swap_params: uint256[5][5],
    _amount: uint256,
    _expected: uint256,
    _pools: address[5]=empty(address[5]),
    _receiver: address=msg.sender
) -> uint256:
    """
    @notice Performs up to 5 swaps in a single transaction.
    @dev Routing and swap params must be determined off-chain. This
         functionality is designed for gas efficiency over ease-of-use.
    @param _route Array of [initial token, pool or zap, token, pool or zap, token, ...]
                  The array is iterated until a pool address of 0x00, then the last
                  given token is transferred to `_receiver`
    @param _swap_params Multidimensional array of [i, j, swap type, pool_type, n_coins] where
                        i is the index of input token
                        j is the index of output token

                        The swap_type should be:
                        1. for `exchange`,
                        2. for `exchange_underlying`,
                        3. for underlying exchange via zap: factory stable metapools with lending base pool `exchange_underlying`
                           and factory crypto-meta pools underlying exchange (`exchange` method in zap)
                        4. for coin -> LP token "exchange" (actually `add_liquidity`),
                        5. for lending pool underlying coin -> LP token "exchange" (actually `add_liquidity`),
                        6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`)
                        7. for LP token -> lending or fake pool underlying coin "exchange" (actually `remove_liquidity_one_coin`)
                        8. for ETH <-> WETH

                        pool_type: 1 - stable, 2 - crypto, 3 - tricrypto, 4 - llamma
                        n_coins is the number of coins in pool
    @param _amount The amount of input token (`_route[0]`) to be sent.
    @param _expected The minimum amount received after the final swap.
    @param _pools Array of pools for swaps via zap contracts. This parameter is needed only for swap_type = 3.
    @param _receiver Address to transfer the final output token to.
    @return Received amount of the final output token.
    """
    input_token: address = _route[0]
    output_token: address = empty(address)
    amount: uint256 = _amount

    # validate / transfer initial token
    if input_token == ETH_ADDRESS:
        assert msg.value == amount
    else:
        assert msg.value == 0
        assert ERC20(input_token).transferFrom(msg.sender, self, amount, default_return_value=True)

    for i in range(1, 6):
        # 5 rounds of iteration to perform up to 5 swaps
        swap: address = _route[i*2-1]
        pool: address = _pools[i-1] # Only for Polygon meta-factories underlying swap (swap_type == 6)
        output_token = _route[i*2]
        params: uint256[5] = _swap_params[i-1]  # i, j, swap_type, pool_type, n_coins

        if not self.is_approved[input_token][swap]:
            assert ERC20(input_token).approve(swap, max_value(uint256), default_return_value=True, skip_contract_check=True)
            self.is_approved[input_token][swap] = True

        eth_amount: uint256 = 0
        if input_token == ETH_ADDRESS:
            eth_amount = amount
        # perform the swap according to the swap type
        if params[2] == 1:
            if params[3] == 1:  # stable
                StablePool(swap).exchange(convert(params[0], int128), convert(params[1], int128), amount, 0, value=eth_amount)
            else:  # crypto, tricrypto or llamma
                if input_token == ETH_ADDRESS or output_token == ETH_ADDRESS:
                    CryptoPoolETH(swap).exchange(params[0], params[1], amount, 0, True, value=eth_amount)
                else:
                    CryptoPool(swap).exchange(params[0], params[1], amount, 0)
        elif params[2] == 2:
            if params[3] == 1:  # stable
                StablePool(swap).exchange_underlying(convert(params[0], int128), convert(params[1], int128), amount, 0, value=eth_amount)
            else:  # crypto or tricrypto
                CryptoPool(swap).exchange_underlying(params[0], params[1], amount, 0, value=eth_amount)
        elif params[2] == 3:  # SWAP IS ZAP HERE !!!
            if params[3] == 1:  # stable
                LendingBasePoolMetaZap(swap).exchange_underlying(pool, convert(params[0], int128), convert(params[1], int128), amount, 0)
            else:  # crypto or tricrypto
                use_eth: bool = input_token == ETH_ADDRESS or output_token == ETH_ADDRESS
                CryptoMetaZap(swap).exchange(pool, params[0], params[1], amount, 0, use_eth, value=eth_amount)
        elif params[2] == 4:
            if params[4] == 2:
                amounts: uint256[2] = [0, 0]
                amounts[params[0]] = amount
                StablePool2Coins(swap).add_liquidity(amounts, 0, value=eth_amount)
            elif params[4] == 3:
                amounts: uint256[3] = [0, 0, 0]
                amounts[params[0]] = amount
                StablePool3Coins(swap).add_liquidity(amounts, 0, value=eth_amount)
            elif params[4] == 4:
                amounts: uint256[4] = [0, 0, 0, 0]
                amounts[params[0]] = amount
                StablePool4Coins(swap).add_liquidity(amounts, 0, value=eth_amount)
            elif params[4] == 5:
                amounts: uint256[5] = [0, 0, 0, 0, 0]
                amounts[params[0]] = amount
                StablePool5Coins(swap).add_liquidity(amounts, 0, value=eth_amount)
        elif params[2] == 5:
            amounts: uint256[3] = [0, 0, 0]
            amounts[params[0]] = amount
            LendingStablePool3Coins(swap).add_liquidity(amounts, 0, True, value=eth_amount) # example: aave on Polygon
        elif params[2] == 6:
            if params[3] == 1:  # stable
                StablePool(swap).remove_liquidity_one_coin(amount, convert(params[1], int128), 0)
            else:  # crypto or tricrypto
                CryptoPool(swap).remove_liquidity_one_coin(amount, params[1], 0)  # example: atricrypto3 on Polygon
        elif params[2] == 7:
            LendingStablePool3Coins(swap).remove_liquidity_one_coin(amount, convert(params[1], int128), 0, True) # example: aave on Polygon
        elif params[2] == 8:
            if input_token == ETH_ADDRESS and output_token == WETH_ADDRESS:
                WETH(swap).deposit(value=amount)
            elif input_token == WETH_ADDRESS and output_token == ETH_ADDRESS:
                WETH(swap).withdraw(amount)
            else:
                raise "Swap type 8 is only for ETH <-> WETH"
        else:
            raise "Bad swap type"

        # update the amount received
        if output_token == ETH_ADDRESS:
            amount = self.balance
        else:
            amount = ERC20(output_token).balanceOf(self)

        # sanity check, if the routing data is incorrect we will have a 0 balance and that is bad
        assert amount != 0, "Received nothing"

        # check if this was the last swap
        if i == 5 or _route[i*2+1] == empty(address):
            break
        # if there is another swap, the output token becomes the input for the next round
        input_token = output_token

    amount -= 1  # Change non-zero -> non-zero costs less gas than zero -> non-zero
    assert amount >= _expected, "Slippage"

    # transfer the final token to the receiver
    if output_token == ETH_ADDRESS:
        raw_call(_receiver, b"", value=amount)
    else:
        assert ERC20(output_token).transfer(_receiver, amount, default_return_value=True)

    log Exchange(msg.sender, _receiver, _route, _swap_params, _pools, _amount, amount)

    return amount


@view
@external
def get_dy(
    _route: address[11],
    _swap_params: uint256[5][5],
    _amount: uint256,
    _pools: address[5]=empty(address[5])
) -> uint256:
    """
    @notice Get amount of the final output token received in an exchange
    @dev Routing and swap params must be determined off-chain. This
         functionality is designed for gas efficiency over ease-of-use.
    @param _route Array of [initial token, pool or zap, token, pool or zap, token, ...]
                  The array is iterated until a pool address of 0x00, then the last
                  given token is transferred to `_receiver`
    @param _swap_params Multidimensional array of [i, j, swap type, pool_type, n_coins] where
                        i is the index of input token
                        j is the index of output token

                        The swap_type should be:
                        1. for `exchange`,
                        2. for `exchange_underlying`,
                        3. for underlying exchange via zap: factory stable metapools with lending base pool `exchange_underlying`
                           and factory crypto-meta pools underlying exchange (`exchange` method in zap)
                        4. for coin -> LP token "exchange" (actually `add_liquidity`),
                        5. for lending pool underlying coin -> LP token "exchange" (actually `add_liquidity`),
                        6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`)
                        7. for LP token -> lending or fake pool underlying coin "exchange" (actually `remove_liquidity_one_coin`)
                        8. for ETH <-> WETH

                        pool_type: 1 - stable, 2 - crypto, 3 - tricrypto, 4 - llamma
                        n_coins is the number of coins in pool
    @param _amount The amount of input token (`_route[0]`) to be sent.
    @param _pools Array of pools for swaps via zap contracts. This parameter is needed only for swap_type = 3.
    @return Expected amount of the final output token.
    """
    input_token: address = _route[0]
    output_token: address = empty(address)
    amount: uint256 = _amount

    for i in range(1, 6):
        # 5 rounds of iteration to perform up to 5 swaps
        swap: address = _route[i*2-1]
        pool: address = _pools[i-1] # Only for Polygon meta-factories underlying swap (swap_type == 4)
        output_token = _route[i * 2]
        params: uint256[5] = _swap_params[i-1]  # i, j, swap_type, pool_type, n_coins

        # Calc output amount according to the swap type
        if params[2] == 1:
            if params[3] == 1:  # stable
                amount = StablePool(swap).get_dy(convert(params[0], int128), convert(params[1], int128), amount)
            else:  # crypto or llamma
                amount = CryptoPool(swap).get_dy(params[0], params[1], amount)
        elif params[2] == 2:
            if params[3] == 1:  # stable
                amount = StablePool(swap).get_dy_underlying(convert(params[0], int128), convert(params[1], int128), amount)
            else:  # crypto
                amount = CryptoPool(swap).get_dy_underlying(params[0], params[1], amount)
        elif params[2] == 3:  # SWAP IS ZAP HERE !!!
            if params[3] == 1:  # stable
                amount = StablePool(pool).get_dy_underlying(convert(params[0], int128), convert(params[1], int128), amount)
            else:  # crypto
                amount = CryptoMetaZap(swap).get_dy(pool, params[0], params[1], amount)
        elif params[2] in [4, 5]:
            if params[3] == 1: # stable
                amounts: uint256[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
                amounts[params[0]] = amount
                amount = STABLE_CALC.calc_token_amount(swap, output_token, amounts, params[4], True, True)
            else:
                # Tricrypto pools have stablepool interface for calc_token_amount
                if params[4] == 2:
                    amounts: uint256[2] = [0, 0]
                    amounts[params[0]] = amount
                    if params[3] == 2:  # crypto
                        amount = CryptoPool2Coins(swap).calc_token_amount(amounts)
                    else:  # tricrypto
                        amount = StablePool2Coins(swap).calc_token_amount(amounts, True)
                elif params[4] == 3:
                    amounts: uint256[3] = [0, 0, 0]
                    amounts[params[0]] = amount
                    if params[3] == 2:  # crypto
                        amount = CryptoPool3Coins(swap).calc_token_amount(amounts)
                    else:  # tricrypto
                        amount = StablePool3Coins(swap).calc_token_amount(amounts, True)
                elif params[4] == 4:
                    amounts: uint256[4] = [0, 0, 0, 0]
                    amounts[params[0]] = amount
                    if params[3] == 2:  # crypto
                        amount = CryptoPool4Coins(swap).calc_token_amount(amounts)
                    else:  # tricrypto
                        amount = StablePool4Coins(swap).calc_token_amount(amounts, True)
                elif params[4] == 5:
                    amounts: uint256[5] = [0, 0, 0, 0, 0]
                    amounts[params[0]] = amount
                    if params[3] == 2:  # crypto
                        amount = CryptoPool5Coins(swap).calc_token_amount(amounts)
                    else:  # tricrypto
                        amount = StablePool5Coins(swap).calc_token_amount(amounts, True)
        elif params[2] in [6, 7]:
            if params[3] == 1:  # stable
                amount = StablePool(swap).calc_withdraw_one_coin(amount, convert(params[1], int128))
            else:  # crypto
                amount = CryptoPool(swap).calc_withdraw_one_coin(amount, params[1])
        elif params[2] == 8:
            if input_token == WETH_ADDRESS or output_token == WETH_ADDRESS:
                # ETH <--> WETH rate is 1:1
                pass
            else:
                raise "Swap type 8 is only for ETH <-> WETH"
        else:
            raise "Bad swap type"

        # check if this was the last swap
        if i == 5 or _route[i*2+1] == empty(address):
            break
        # if there is another swap, the output token becomes the input for the next round
        input_token = output_token

    return amount - 1


@view
@external
def get_dx(
    _route: address[11],
    _swap_params: uint256[5][5],
    _out_amount: uint256,
    _pools: address[5],
    _base_pools: address[5]=empty(address[5]),
    _base_tokens: address[5]=empty(address[5]),
) -> uint256:
    """
    @notice Calculate the input amount required to receive the desired `_out_amount`
    @dev Routing and swap params must be determined off-chain. This
         functionality is designed for gas efficiency over ease-of-use.
    @param _route Array of [initial token, pool or zap, token, pool or zap, token, ...]
                  The array is iterated until a pool address of 0x00, then the last
                  given token is transferred to `_receiver`
    @param _swap_params Multidimensional array of [i, j, swap type, pool_type, n_coins] where
                        i is the index of input token
                        j is the index of output token

                        The swap_type should be:
                        1. for `exchange`,
                        2. for `exchange_underlying`,
                        3. for underlying exchange via zap: factory stable metapools with lending base pool `exchange_underlying`
                           and factory crypto-meta pools underlying exchange (`exchange` method in zap)
                        4. for coin -> LP token "exchange" (actually `add_liquidity`),
                        5. for lending pool underlying coin -> LP token "exchange" (actually `add_liquidity`),
                        6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`)
                        7. for LP token -> lending or fake pool underlying coin "exchange" (actually `remove_liquidity_one_coin`)
                        8. for ETH <-> WETH

                        pool_type: 1 - stable, 2 - crypto, 3 - tricrypto, 4 - llamma
                        n_coins is the number of coins in pool
    @param _out_amount The desired amount of output coin to receive.
    @param _pools Array of pools.
    @param _base_pools Array of base pools (for meta pools).
    @param _base_tokens Array of base lp tokens (for meta pools).
    @return Required amount of input token to send.
    """
    amount: uint256 = _out_amount

    for _i in range(1, 6):
        # 5 rounds of iteration to perform up to 5 swaps
        i: uint256 = 6 - _i
        swap: address = _route[i*2-1]
        if swap == empty(address):
            continue
        input_token: address = _route[(i - 1) * 2]
        output_token: address = _route[i * 2]
        pool: address = _pools[i-1]
        base_pool: address = _base_pools[i-1]
        base_token: address = _base_tokens[i-1]
        params: uint256[5] = _swap_params[i-1]  # i, j, swap_type, pool_type, n_coins
        n_coins: uint256 = params[4]

        # Calc a required input amount according to the swap type
        if params[2] == 1:
            if params[3] == 1:  # stable
                if base_pool == empty(address):  # non-meta
                    amount = STABLE_CALC.get_dx(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins)
                else:
                    amount = STABLE_CALC.get_dx_meta(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins, base_pool)
            elif params[3] in [2, 3]:  # crypto or tricrypto
                amount = CRYPTO_CALC.get_dx(pool, params[0], params[1], amount, n_coins)
            else:  # llamma
                amount = Llamma(pool).get_dx(params[0], params[1], amount)
        elif params[2] in [2, 3]:
            if params[3] == 1:  # stable
                if base_pool == empty(address):  # non-meta
                    amount = STABLE_CALC.get_dx_underlying(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins)
                else:
                    amount = STABLE_CALC.get_dx_meta_underlying(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins, base_pool, base_token)
            else:  # crypto
                amount = CRYPTO_CALC.get_dx_meta_underlying(pool, params[0], params[1], amount, n_coins, base_pool, base_token)
        elif params[2] in [4, 5]:
            # This is not correct. Should be something like calc_add_one_coin. But tests say that it's precise enough.
            if params[3] == 1:  # stable
                amount = StablePool(swap).calc_withdraw_one_coin(amount, convert(params[0], int128))
            else:  # crypto
                amount = CryptoPool(swap).calc_withdraw_one_coin(amount, params[0])
        elif params[2] in [6, 7]:
            if params[3] == 1: # stable
                amounts: uint256[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
                amounts[params[1]] = amount
                amount = STABLE_CALC.calc_token_amount(swap, input_token, amounts, n_coins, False, True)
            else:
                # Tricrypto pools have stablepool interface for calc_token_amount
                if n_coins == 2:
                    amounts: uint256[2] = [0, 0]
                    amounts[params[1]] = amount
                    if params[3] == 2:  # crypto
                        amount = CryptoPool2Coins(swap).calc_token_amount(amounts)  # This is not correct
                    else:  # tricrypto
                        amount = StablePool2Coins(swap).calc_token_amount(amounts, False)
                elif n_coins == 3:
                    amounts: uint256[3] = [0, 0, 0]
                    amounts[params[1]] = amount
                    if params[3] == 2:  # crypto
                        amount = CryptoPool3Coins(swap).calc_token_amount(amounts)  # This is not correct
                    else:  # tricrypto
                        amount = StablePool3Coins(swap).calc_token_amount(amounts, False)
                elif n_coins == 4:
                    amounts: uint256[4] = [0, 0, 0, 0]
                    amounts[params[1]] = amount
                    if params[3] == 2:  # crypto
                        amount = CryptoPool4Coins(swap).calc_token_amount(amounts)  # This is not correct
                    else:  # tricrypto
                        amount = StablePool4Coins(swap).calc_token_amount(amounts, False)
                elif n_coins == 5:
                    amounts: uint256[5] = [0, 0, 0, 0, 0]
                    amounts[params[1]] = amount
                    if params[3] == 2:  # crypto
                        amount = CryptoPool5Coins(swap).calc_token_amount(amounts)  # This is not correct
                    else:  # tricrypto
                        amount = StablePool5Coins(swap).calc_token_amount(amounts, False)
        elif params[2] == 8:
            if input_token == WETH_ADDRESS or output_token == WETH_ADDRESS:
                # ETH <--> WETH rate is 1:1
                pass
            else:
                raise "Swap type 8 is only for ETH <-> WETH"
        else:
            raise "Bad swap type"

    return amount

Contract Security Audit

Contract ABI

[{"name":"Exchange","inputs":[{"name":"sender","type":"address","indexed":true},{"name":"receiver","type":"address","indexed":true},{"name":"route","type":"address[11]","indexed":false},{"name":"swap_params","type":"uint256[5][5]","indexed":false},{"name":"pools","type":"address[5]","indexed":false},{"name":"in_amount","type":"uint256","indexed":false},{"name":"out_amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_weth","type":"address"},{"name":"_stable_calc","type":"address"},{"name":"_crypto_calc","type":"address"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"},{"name":"_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"},{"name":"_pools","type":"address[5]"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_out_amount","type":"uint256"},{"name":"_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_out_amount","type":"uint256"},{"name":"_pools","type":"address[5]"},{"name":"_base_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_out_amount","type":"uint256"},{"name":"_pools","type":"address[5]"},{"name":"_base_pools","type":"address[5]"},{"name":"_base_tokens","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]}]

6020612c1b6000396000518060a01c612c16576040526020612c3b6000396000518060a01c612c16576060526020612c5b6000396000518060a01c612c165760805234612c1657604051612ba852606051612bc852608051612be852612ba861006d61000039612c08610000f36003361161000c57612b94565b60003560e01c63371dc4478118610037576104c43610612b965760a0366101a037336102405261011a565b635c9c18e281186100a5576105643610612b96576104c4358060a01c612b96576101a0526104e4358060a01c612b96576101c052610504358060a01c612b96576101e052610524358060a01c612b965761020052610544358060a01c612b965761022052336102405261011a565b63c872a3c5811861111c576105843610612b96576104c4358060a01c612b96576101a0526104e4358060a01c612b96576101c052610504358060a01c612b96576101e052610524358060a01c612b965761020052610544358060a01c612b965761022052610564358060a01c612b9657610240525b6004358060a01c612b96576040526024358060a01c612b96576060526044358060a01c612b96576080526064358060a01c612b965760a0526084358060a01c612b965760c05260a4358060a01c612b965760e05260c4358060a01c612b96576101005260e4358060a01c612b965761012052610104358060a01c612b965761014052610124358060a01c612b965761016052610144358060a01c612b965761018052600054600114612b9657600160005560405161026052600061028052610484356102a05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610260511861020d576102a0513418612b965761028b565b34612b9657610260516323b872dd6102c052336102e05230610300526102a0516103205260206102c060646102dc6000855af161024f573d600060003e3d6000fd5b3d61026657803b15612b965760016103405261027f565b60203d10612b96576102c0518060011c612b9657610340525b61034090505115612b96575b600160058101905b806102c0526102c0518060011b818160011c18612b9657905060018103818111612b96579050600a8111612b965760051b604001516102e0526102c05160018103818111612b9657905060048111612b965760051b6101a00151610300526102c0518060011b818160011c18612b96579050600a8111612b965760051b604001516102805260a06102c05160018103818111612b9657905060048111612b9657026101640180356103205260208101356103405260408101356103605260608101356103805260808101356103a052506001610260516020526000526040600020806102e0516020526000526040600020905054610436576102605163095ea7b36103c0526102e0516103e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104005260206103c060446103dc6000855af16103e3573d600060003e3d6000fd5b3d6103f357600161042052610404565b6103c0518060011c612b9657610420525b61042090505115612b965760016001610260516020526000526040600020806102e05160205260005260406000209050555b60006103c05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610463576102a0516103c0525b600161036051186105da57600161038051186104e1576102e051633df021246103e0526103205180607f1c612b9657610400526103405180607f1c612b9657610420526102a05161044052600061046052803b15612b965760006103e060846103fc6103c051855af16104db573d600060003e3d6000fd5b50610da2565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610506576001610522565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b61057c576102e051635b41b9086103e052610320516104005261034051610420526102a05161044052600061046052803b15612b965760006103e060846103fc6000855af1610576573d600060003e3d6000fd5b50610da2565b6102e05163394747c56103e052610320516104005261034051610420526102a05161044052600061046052600161048052803b15612b965760006103e060a46103fc6103c051855af16105d4573d600060003e3d6000fd5b50610da2565b600261036051186106b05760016103805118610658576102e05163a6417ed66103e0526103205180607f1c612b9657610400526103405180607f1c612b9657610420526102a05161044052600061046052803b15612b965760006103e060846103fc6103c051855af1610652573d600060003e3d6000fd5b50610da2565b6102e0516365b2489b6103e052610320516104005261034051610420526102a05161044052600061046052803b15612b965760006103e060846103fc6103c051855af16106aa573d600060003e3d6000fd5b50610da2565b600361036051186107e15760016103805118610734576102e051637981c43e6103e05261030051610400526103205180607f1c612b9657610420526103405180607f1c612b9657610440526102a05161046052600061048052803b15612b965760006103e060a46103fc6000855af161072e573d600060003e3d6000fd5b50610da2565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610759576001610775565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b6103e0526102e051632bf78c61610400526103005161042052610320516104405261034051610460526102a0516104805260006104a0526103e0516104c052803b15612b9657600061040060c461041c6103c051855af16107db573d600060003e3d6000fd5b50610da2565b60046103605118610a045760026103a05118610866576040366103e0376102a0516103205160018111612b965760051b6103e001526102e051630b4c7e4d610420526103e051610440526104005161046052600061048052803b15612b96576000610420606461043c6103c051855af1610860573d600060003e3d6000fd5b50610da2565b60036103a051186108e8576060366103e0376102a0516103205160028111612b965760051b6103e001526102e051634515cef3610440526103e051610460526104005161048052610420516104a05260006104c052803b15612b96576000610440608461045c6103c051855af16108e2573d600060003e3d6000fd5b50610da2565b60046103a05118610972576080366103e0376102a0516103205160038111612b965760051b6103e001526102e05163029b2f34610460526103e05161048052610400516104a052610420516104c052610440516104e052600061050052803b15612b9657600061046060a461047c6103c051855af161096c573d600060003e3d6000fd5b50610da2565b60056103a05118610da25760a0366103e0376102a0516103205160048111612b965760051b6103e001526102e0516384738499610480526103e0516104a052610400516104c052610420516104e05261044051610500526104605161052052600061054052803b15612b9657600061048060c461049c6103c051855af16109fe573d600060003e3d6000fd5b50610da2565b60056103605118610a8c576060366103e0376102a0516103205160028111612b965760051b6103e001526102e051632b6e993a610440526103e051610460526104005161048052610420516104a05260006104c05260016104e052803b15612b9657600061044060a461045c6103c051855af1610a86573d600060003e3d6000fd5b50610da2565b60066103605118610b465760016103805118610af8576102e051631a4d01d26103e0526102a051610400526103405180607f1c612b965761042052600061044052803b15612b965760006103e060646103fc6000855af1610af2573d600060003e3d6000fd5b50610da2565b6102e05163f1dc3cc96103e0526102a051610400526103405161042052600061044052803b15612b965760006103e060646103fc6000855af1610b40573d600060003e3d6000fd5b50610da2565b60076103605118610bb2576102e05163517a55a36103e0526102a051610400526103405180607f1c612b96576104205260006104405260016104605260206103e060846103fc6000855af1610ba0573d600060003e3d6000fd5b60203d10612b96576103e05050610da2565b60086103605118610d3c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610bf1576020612ba8600039600051610280511815610bf4565b60005b610d02576020612ba86000396000516102605118610c2c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610280511815610c2f565b60005b610cc25760246103e0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610400527f5745544800000000000000000000000000000000000000000000000000000000610420526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd610da2565b6102e051632e1a7d4d6103e0526102a05161040052803b15612b965760006103e060246103fc6000855af1610cfc573d600060003e3d6000fd5b50610da2565b6102e05163d0e30db06103e052803b15612b965760006103e060046103fc6102a051855af1610d36573d600060003e3d6000fd5b50610da2565b600d6103e0527f4261642073776170207479706500000000000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118610dca57476102a052610e0b565b610280516370a082316103e052306104005260206103e060246103fc845afa610df8573d600060003e3d6000fd5b60203d10612b96576103e09050516102a0525b6102a051610e795760106103e0527f5265636569766564206e6f7468696e6700000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b60056102c05118610e8b576001610ebd565b6102c0518060011b818160011c18612b9657905060018101818110612b96579050600a8111612b965760051b60400151155b15610ec757610eda565b6102805161026052600101818118610293575b50506102a05160018103818111612b965790506102a0526104a4356102a0511015610f655760086102c0527f536c6970706167650000000000000000000000000000000000000000000000006102e0526102c0506102c051806102e001601f826000031636823750506308c379a06102805260206102a052601f19601f6102c051011660440161029cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118610fb55760006102c0526102c050600060006102c0516102e06102a051610240515af161102c573d600060003e3d6000fd61102c565b6102805163a9059cbb6102c052610240516102e0526102a0516103005260206102c060446102dc6000855af1610ff0573d600060003e3d6000fd5b3d61100757803b15612b9657600161032052611020565b60203d10612b96576102c0518060011c612b9657610320525b61032090505115612b96575b61024051337f56d0661e240dfb199ef196e16e6f42473990366314f0226ac978f7be3cd9ee836040516102c0526060516102e0526080516103005260a0516103205260c0516103405260e051610360526101005161038052610120516103a052610140516103c052610160516103e052610180516104005260a06101646104203760a06102046104c03760a06102a46105603760a06103446106003760a06103e46106a0376101a051610740526101c051610760526101e05161078052610200516107a052610220516107c052610484356107e0526102a051610800526105606102c0a360206102a06000600055f35b6381889a2c811861113c576104a43610612b965760a0366101a0376111a1565b63637653cb8118611d17576105443610612b96576104a4358060a01c612b96576101a0526104c4358060a01c612b96576101c0526104e4358060a01c612b96576101e052610504358060a01c612b965761020052610524358060a01c612b9657610220525b6004358060a01c612b96576040526024358060a01c612b96576060526044358060a01c612b96576080526064358060a01c612b965760a0526084358060a01c612b965760c05260a4358060a01c612b965760e05260c4358060a01c612b96576101005260e4358060a01c612b965761012052610104358060a01c612b965761014052610124358060a01c612b965761016052610144358060a01c612b96576101805234612b9657604051610240526000610260526104843561028052600160058101905b806102a0526102a0518060011b818160011c18612b9657905060018103818111612b96579050600a8111612b965760051b604001516102c0526102a05160018103818111612b9657905060048111612b965760051b6101a001516102e0526102a0518060011b818160011c18612b96579050600a8111612b965760051b604001516102605260a06102a05160018103818111612b9657905060048111612b96570261016401803561030052602081013561032052604081013561034052606081013561036052608081013561038052506001610340511861140b57600161036051186113b3576102c051635e0d443f6103a0526103005180607f1c612b96576103c0526103205180607f1c612b96576103e052610280516104005260206103a060646103bc845afa61139c573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b6102c05163556d6e9f6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa6113f4573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b600261034051186114e15760016103605118611489576102c0516307211ef76103a0526103005180607f1c612b96576103c0526103205180607f1c612b96576103e052610280516104005260206103a060646103bc845afa611472573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b6102c0516385f11d1e6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa6114ca573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b600361034051186115bf576001610360511861155f576102e0516307211ef76103a0526103005180607f1c612b96576103c0526103205180607f1c612b96576103e052610280516104005260206103a060646103bc845afa611548573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b6102c05163e9737ee26103a0526102e0516103c052610300516103e0526103205161040052610280516104205260206103a060846103bc845afa6115a8573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b61034051600481186115d25760016115d8565b60058118155b90506117e95761034051600681186115f15760016115f7565b60078118155b905061173657600861034051186116cc576020612ba86000396000516102405118611623576001611635565b6020612ba86000396000516102605118155b611c985760246103a0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e206103c0527f57455448000000000000000000000000000000000000000000000000000000006103e0526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd611c9856611c98565b600d6103a0527f42616420737761702074797065000000000000000000000000000000000000006103c0526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd611c98565b60016103605118611799576102c05163cc2b27d76103c052610280516103e0526103205180607f1c612b96576104005260206103c060446103dc845afa611782573d600060003e3d6000fd5b60203d10612b96576103c090505161028052611c98565b6102c051634fb08c5e6103c052610280516103e052610320516104005260206103c060446103dc845afa6117d2573d600060003e3d6000fd5b60203d10612b96576103c090505161028052611c98565b600161036051186118d057610140366103c037610280516103005160098111612b965760051b6103c001526020612bc86000396000516379ccdf49610500526102c0516105205261026051610540526103c051610560526103e05161058052610400516105a052610420516105c052610440516105e052610460516106005261048051610620526104a051610640526104c051610660526104e05161068052610380516106a05260016106c05260016106e05260206105006101e461051c845afa6118b9573d600060003e3d6000fd5b60203d10612b965761050090505161028052611c98565b600261038051186119ab576040366103c037610280516103005160018111612b965760051b6103c0015260026103605118611955576102c051638d8ea727610400526103c051610420526103e051610440526020610400604461041c845afa61193e573d600060003e3d6000fd5b60203d10612b965761040090505161028052611c98565b6102c05163ed8e84f3610400526103c051610420526103e051610440526001610460526020610400606461041c845afa611994573d600060003e3d6000fd5b60203d10612b965761040090505161028052611c98565b60036103805118611a96576060366103c037610280516103005160028111612b965760051b6103c0015260026103605118611a38576102c051635b6f1b5a610420526103c051610440526103e0516104605261040051610480526020610420606461043c845afa611a21573d600060003e3d6000fd5b60203d10612b965761042090505161028052611c98565b6102c051633883e119610420526103c051610440526103e05161046052610400516104805260016104a0526020610420608461043c845afa611a7f573d600060003e3d6000fd5b60203d10612b965761042090505161028052611c98565b60046103805118611b91576080366103c037610280516103005160038111612b965760051b6103c0015260026103605118611b2b576102c051631a805185610440526103c051610460526103e05161048052610400516104a052610420516104c0526020610440608461045c845afa611b14573d600060003e3d6000fd5b60203d10612b965761044090505161028052611c98565b6102c05163cf701ff7610440526103c051610460526103e05161048052610400516104a052610420516104c05260016104e052602061044060a461045c845afa611b7a573d600060003e3d6000fd5b60203d10612b965761044090505161028052611c98565b60056103805118611c985760a0366103c037610280516103005160048111612b965760051b6103c0015260026103605118611c2e576102c0516309379690610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052602061046060a461047c845afa611c17573d600060003e3d6000fd5b60203d10612b965761046090505161028052611c98565b6102c051637ede89c5610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052600161052052602061046060c461047c845afa611c85573d600060003e3d6000fd5b60203d10612b9657610460905051610280525b60056102a05118611caa576001611cdc565b6102a0518060011b818160011c18612b9657905060018101818110612b96579050600a8111612b965760051b60400151155b15611ce657611cf9565b6102605161024052600101818118611265575b50506102805160018103818111612b965790506102a05260206102a0f35b63c07b53538118611d38576105443610612b96576101403661024037611e5d565b6381fc0ca58118611da8576105e43610612b9657610544358060a01c612b965761024052610564358060a01c612b965761026052610584358060a01c612b9657610280526105a4358060a01c612b96576102a0526105c4358060a01c612b96576102c05260a0366102e037611e5d565b6390e7e2058118612b92576106843610612b9657610544358060a01c612b965761024052610564358060a01c612b965761026052610584358060a01c612b9657610280526105a4358060a01c612b96576102a0526105c4358060a01c612b96576102c0526105e4358060a01c612b96576102e052610604358060a01c612b965761030052610624358060a01c612b965761032052610644358060a01c612b965761034052610664358060a01c612b9657610360525b6004358060a01c612b96576040526024358060a01c612b96576060526044358060a01c612b96576080526064358060a01c612b965760a0526084358060a01c612b965760c05260a4358060a01c612b965760e05260c4358060a01c612b96576101005260e4358060a01c612b965761012052610104358060a01c612b965761014052610124358060a01c612b965761016052610144358060a01c612b9657610180526104a4358060a01c612b96576101a0526104c4358060a01c612b96576101c0526104e4358060a01c612b96576101e052610504358060a01c612b965761020052610524358060a01c612b96576102205234612b96576104843561038052600160058101905b806103a0526103a0518060060360068111612b965790506103c0526103c0518060011b818160011c18612b9657905060018103818111612b96579050600a8111612b965760051b604001516103e0526103e051611fc057612b7f565b6103c05160018103818111612b965790508060011b818160011c18612b96579050600a8111612b965760051b60400151610400526103c0518060011b818160011c18612b96579050600a8111612b965760051b60400151610420526103c05160018103818111612b9657905060048111612b965760051b6101a00151610440526103c05160018103818111612b9657905060048111612b965760051b6102400151610460526103c05160018103818111612b9657905060048111612b965760051b6102e001516104805260a06103c05160018103818111612b9657905060048111612b9657026101640180356104a05260208101356104c05260408101356104e05260608101356105005260808101356105205250610520516105405260016104e051186122e75760016105005118612201576104605161217a576020612bc860003960005163158819d46105605261044051610580526104a05180607f1c612b96576105a0526104c05180607f1c612b96576105c052610380516105e0526105405161060052602061056060a461057c845afa612163573d600060003e3d6000fd5b60203d10612b965761056090505161038052612b7f565b6020612bc860003960005163571f00b56105605261044051610580526104a05180607f1c612b96576105a0526104c05180607f1c612b96576105c052610380516105e05261054051610600526104605161062052602061056060c461057c845afa6121ea573d600060003e3d6000fd5b60203d10612b965761056090505161038052612b7f565b610500516002811861221457600161221a565b60038118155b905061227857610440516337ed3a7a610560526104a051610580526104c0516105a052610380516105c0526020610560606461057c845afa612261573d600060003e3d6000fd5b60203d10612b965761056090505161038052612b7f565b6020612be860003960005163ca4bc71461058052610440516105a0526104a0516105c0526104c0516105e05261038051610600526105405161062052602061058060a461059c845afa6122d0573d600060003e3d6000fd5b60203d10612b965761058090505161038052612b7f565b6104e051600281186122fa576001612300565b60038118155b90506129e3576104e0516004811861231957600161231f565b60058118155b9050612930576104e0516006811861233857600161233e565b60078118155b905061247d5760086104e05118612413576020612ba8600039600051610400511861236a57600161237c565b6020612ba86000396000516104205118155b612b7f576024610560527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610580527f57455448000000000000000000000000000000000000000000000000000000006105a05261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd612b7f56612b7f565b600d610560527f42616420737761702074797065000000000000000000000000000000000000006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd612b7f565b60016105005118612564576101403661058037610380516104c05160098111612b965760051b61058001526020612bc86000396000516379ccdf496106c0526103e0516106e052610400516107005261058051610720526105a051610740526105c051610760526105e05161078052610600516107a052610620516107c052610640516107e052610660516108005261068051610820526106a05161084052610540516108605260006108805260016108a05260206106c06101e46106dc845afa61254d573d600060003e3d6000fd5b60203d10612b96576106c090505161038052612b7f565b6002610540511861263f5760403661058037610380516104c05160018111612b965760051b6105800152600261050051186125e9576103e051638d8ea7276105c052610580516105e0526105a0516106005260206105c060446105dc845afa6125d2573d600060003e3d6000fd5b60203d10612b96576105c090505161038052612b7f565b6103e05163ed8e84f36105c052610580516105e0526105a0516106005260006106205260206105c060646105dc845afa612628573d600060003e3d6000fd5b60203d10612b96576105c090505161038052612b7f565b6003610540511861272a5760603661058037610380516104c05160028111612b965760051b6105800152600261050051186126cc576103e051635b6f1b5a6105e05261058051610600526105a051610620526105c0516106405260206105e060646105fc845afa6126b5573d600060003e3d6000fd5b60203d10612b96576105e090505161038052612b7f565b6103e051633883e1196105e05261058051610600526105a051610620526105c0516106405260006106605260206105e060846105fc845afa612713573d600060003e3d6000fd5b60203d10612b96576105e090505161038052612b7f565b600461054051186128255760803661058037610380516104c05160038111612b965760051b6105800152600261050051186127bf576103e051631a8051856106005261058051610620526105a051610640526105c051610660526105e051610680526020610600608461061c845afa6127a8573d600060003e3d6000fd5b60203d10612b965761060090505161038052612b7f565b6103e05163cf701ff76106005261058051610620526105a051610640526105c051610660526105e0516106805260006106a052602061060060a461061c845afa61280e573d600060003e3d6000fd5b60203d10612b965761060090505161038052612b7f565b60056105405118612b7f5760a03661058037610380516104c05160048111612b965760051b6105800152600261050051186128c2576103e05163093796906106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c052602061062060a461063c845afa6128ab573d600060003e3d6000fd5b60203d10612b965761062090505161038052612b7f565b6103e051637ede89c56106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c05260006106e052602061062060c461063c845afa612919573d600060003e3d6000fd5b60203d10612b965761062090505161038052612b7f565b60016105005118612993576103e05163cc2b27d761058052610380516105a0526104a05180607f1c612b96576105c0526020610580604461059c845afa61297c573d600060003e3d6000fd5b60203d10612b965761058090505161038052612b7f565b6103e051634fb08c5e61058052610380516105a0526104a0516105c0526020610580604461059c845afa6129cc573d600060003e3d6000fd5b60203d10612b965761058090505161038052612b7f565b60016105005118612b045761046051612a75576020612bc8600039600051638fd3218f61058052610440516105a0526104a05180607f1c612b96576105c0526104c05180607f1c612b96576105e05261038051610600526105405161062052602061058060a461059c845afa612a5e573d600060003e3d6000fd5b60203d10612b965761058090505161038052612b7f565b6020612bc8600039600051634933a86461058052610440516105a0526104a05180607f1c612b96576105c0526104c05180607f1c612b96576105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa612aed573d600060003e3d6000fd5b60203d10612b965761058090505161038052612b7f565b6020612be8600039600051638ca1565361058052610440516105a0526104a0516105c0526104c0516105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa612b6c573d600060003e3d6000fd5b60203d10612b9657610580905051610380525b600101818118611f645750506020610380f35b505b005b600080fda165767970657283000307000b005b600080fd00000000000000000000000042000000000000000000000000000000000000060000000000000000000000005552b631e2ad801faa129aacf4b701071cc9d1f7000000000000000000000000efaddde5b43917ccc738ade6962295a0b343f7ce

Deployed Bytecode

0x6003361161000c57612b94565b60003560e01c63371dc4478118610037576104c43610612b965760a0366101a037336102405261011a565b635c9c18e281186100a5576105643610612b96576104c4358060a01c612b96576101a0526104e4358060a01c612b96576101c052610504358060a01c612b96576101e052610524358060a01c612b965761020052610544358060a01c612b965761022052336102405261011a565b63c872a3c5811861111c576105843610612b96576104c4358060a01c612b96576101a0526104e4358060a01c612b96576101c052610504358060a01c612b96576101e052610524358060a01c612b965761020052610544358060a01c612b965761022052610564358060a01c612b9657610240525b6004358060a01c612b96576040526024358060a01c612b96576060526044358060a01c612b96576080526064358060a01c612b965760a0526084358060a01c612b965760c05260a4358060a01c612b965760e05260c4358060a01c612b96576101005260e4358060a01c612b965761012052610104358060a01c612b965761014052610124358060a01c612b965761016052610144358060a01c612b965761018052600054600114612b9657600160005560405161026052600061028052610484356102a05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610260511861020d576102a0513418612b965761028b565b34612b9657610260516323b872dd6102c052336102e05230610300526102a0516103205260206102c060646102dc6000855af161024f573d600060003e3d6000fd5b3d61026657803b15612b965760016103405261027f565b60203d10612b96576102c0518060011c612b9657610340525b61034090505115612b96575b600160058101905b806102c0526102c0518060011b818160011c18612b9657905060018103818111612b96579050600a8111612b965760051b604001516102e0526102c05160018103818111612b9657905060048111612b965760051b6101a00151610300526102c0518060011b818160011c18612b96579050600a8111612b965760051b604001516102805260a06102c05160018103818111612b9657905060048111612b9657026101640180356103205260208101356103405260408101356103605260608101356103805260808101356103a052506001610260516020526000526040600020806102e0516020526000526040600020905054610436576102605163095ea7b36103c0526102e0516103e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104005260206103c060446103dc6000855af16103e3573d600060003e3d6000fd5b3d6103f357600161042052610404565b6103c0518060011c612b9657610420525b61042090505115612b965760016001610260516020526000526040600020806102e05160205260005260406000209050555b60006103c05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610463576102a0516103c0525b600161036051186105da57600161038051186104e1576102e051633df021246103e0526103205180607f1c612b9657610400526103405180607f1c612b9657610420526102a05161044052600061046052803b15612b965760006103e060846103fc6103c051855af16104db573d600060003e3d6000fd5b50610da2565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610506576001610522565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b61057c576102e051635b41b9086103e052610320516104005261034051610420526102a05161044052600061046052803b15612b965760006103e060846103fc6000855af1610576573d600060003e3d6000fd5b50610da2565b6102e05163394747c56103e052610320516104005261034051610420526102a05161044052600061046052600161048052803b15612b965760006103e060a46103fc6103c051855af16105d4573d600060003e3d6000fd5b50610da2565b600261036051186106b05760016103805118610658576102e05163a6417ed66103e0526103205180607f1c612b9657610400526103405180607f1c612b9657610420526102a05161044052600061046052803b15612b965760006103e060846103fc6103c051855af1610652573d600060003e3d6000fd5b50610da2565b6102e0516365b2489b6103e052610320516104005261034051610420526102a05161044052600061046052803b15612b965760006103e060846103fc6103c051855af16106aa573d600060003e3d6000fd5b50610da2565b600361036051186107e15760016103805118610734576102e051637981c43e6103e05261030051610400526103205180607f1c612b9657610420526103405180607f1c612b9657610440526102a05161046052600061048052803b15612b965760006103e060a46103fc6000855af161072e573d600060003e3d6000fd5b50610da2565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610759576001610775565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b6103e0526102e051632bf78c61610400526103005161042052610320516104405261034051610460526102a0516104805260006104a0526103e0516104c052803b15612b9657600061040060c461041c6103c051855af16107db573d600060003e3d6000fd5b50610da2565b60046103605118610a045760026103a05118610866576040366103e0376102a0516103205160018111612b965760051b6103e001526102e051630b4c7e4d610420526103e051610440526104005161046052600061048052803b15612b96576000610420606461043c6103c051855af1610860573d600060003e3d6000fd5b50610da2565b60036103a051186108e8576060366103e0376102a0516103205160028111612b965760051b6103e001526102e051634515cef3610440526103e051610460526104005161048052610420516104a05260006104c052803b15612b96576000610440608461045c6103c051855af16108e2573d600060003e3d6000fd5b50610da2565b60046103a05118610972576080366103e0376102a0516103205160038111612b965760051b6103e001526102e05163029b2f34610460526103e05161048052610400516104a052610420516104c052610440516104e052600061050052803b15612b9657600061046060a461047c6103c051855af161096c573d600060003e3d6000fd5b50610da2565b60056103a05118610da25760a0366103e0376102a0516103205160048111612b965760051b6103e001526102e0516384738499610480526103e0516104a052610400516104c052610420516104e05261044051610500526104605161052052600061054052803b15612b9657600061048060c461049c6103c051855af16109fe573d600060003e3d6000fd5b50610da2565b60056103605118610a8c576060366103e0376102a0516103205160028111612b965760051b6103e001526102e051632b6e993a610440526103e051610460526104005161048052610420516104a05260006104c05260016104e052803b15612b9657600061044060a461045c6103c051855af1610a86573d600060003e3d6000fd5b50610da2565b60066103605118610b465760016103805118610af8576102e051631a4d01d26103e0526102a051610400526103405180607f1c612b965761042052600061044052803b15612b965760006103e060646103fc6000855af1610af2573d600060003e3d6000fd5b50610da2565b6102e05163f1dc3cc96103e0526102a051610400526103405161042052600061044052803b15612b965760006103e060646103fc6000855af1610b40573d600060003e3d6000fd5b50610da2565b60076103605118610bb2576102e05163517a55a36103e0526102a051610400526103405180607f1c612b96576104205260006104405260016104605260206103e060846103fc6000855af1610ba0573d600060003e3d6000fd5b60203d10612b96576103e05050610da2565b60086103605118610d3c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610bf1576020612ba8600039600051610280511815610bf4565b60005b610d02576020612ba86000396000516102605118610c2c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610280511815610c2f565b60005b610cc25760246103e0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610400527f5745544800000000000000000000000000000000000000000000000000000000610420526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd610da2565b6102e051632e1a7d4d6103e0526102a05161040052803b15612b965760006103e060246103fc6000855af1610cfc573d600060003e3d6000fd5b50610da2565b6102e05163d0e30db06103e052803b15612b965760006103e060046103fc6102a051855af1610d36573d600060003e3d6000fd5b50610da2565b600d6103e0527f4261642073776170207479706500000000000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118610dca57476102a052610e0b565b610280516370a082316103e052306104005260206103e060246103fc845afa610df8573d600060003e3d6000fd5b60203d10612b96576103e09050516102a0525b6102a051610e795760106103e0527f5265636569766564206e6f7468696e6700000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b60056102c05118610e8b576001610ebd565b6102c0518060011b818160011c18612b9657905060018101818110612b96579050600a8111612b965760051b60400151155b15610ec757610eda565b6102805161026052600101818118610293575b50506102a05160018103818111612b965790506102a0526104a4356102a0511015610f655760086102c0527f536c6970706167650000000000000000000000000000000000000000000000006102e0526102c0506102c051806102e001601f826000031636823750506308c379a06102805260206102a052601f19601f6102c051011660440161029cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118610fb55760006102c0526102c050600060006102c0516102e06102a051610240515af161102c573d600060003e3d6000fd61102c565b6102805163a9059cbb6102c052610240516102e0526102a0516103005260206102c060446102dc6000855af1610ff0573d600060003e3d6000fd5b3d61100757803b15612b9657600161032052611020565b60203d10612b96576102c0518060011c612b9657610320525b61032090505115612b96575b61024051337f56d0661e240dfb199ef196e16e6f42473990366314f0226ac978f7be3cd9ee836040516102c0526060516102e0526080516103005260a0516103205260c0516103405260e051610360526101005161038052610120516103a052610140516103c052610160516103e052610180516104005260a06101646104203760a06102046104c03760a06102a46105603760a06103446106003760a06103e46106a0376101a051610740526101c051610760526101e05161078052610200516107a052610220516107c052610484356107e0526102a051610800526105606102c0a360206102a06000600055f35b6381889a2c811861113c576104a43610612b965760a0366101a0376111a1565b63637653cb8118611d17576105443610612b96576104a4358060a01c612b96576101a0526104c4358060a01c612b96576101c0526104e4358060a01c612b96576101e052610504358060a01c612b965761020052610524358060a01c612b9657610220525b6004358060a01c612b96576040526024358060a01c612b96576060526044358060a01c612b96576080526064358060a01c612b965760a0526084358060a01c612b965760c05260a4358060a01c612b965760e05260c4358060a01c612b96576101005260e4358060a01c612b965761012052610104358060a01c612b965761014052610124358060a01c612b965761016052610144358060a01c612b96576101805234612b9657604051610240526000610260526104843561028052600160058101905b806102a0526102a0518060011b818160011c18612b9657905060018103818111612b96579050600a8111612b965760051b604001516102c0526102a05160018103818111612b9657905060048111612b965760051b6101a001516102e0526102a0518060011b818160011c18612b96579050600a8111612b965760051b604001516102605260a06102a05160018103818111612b9657905060048111612b96570261016401803561030052602081013561032052604081013561034052606081013561036052608081013561038052506001610340511861140b57600161036051186113b3576102c051635e0d443f6103a0526103005180607f1c612b96576103c0526103205180607f1c612b96576103e052610280516104005260206103a060646103bc845afa61139c573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b6102c05163556d6e9f6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa6113f4573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b600261034051186114e15760016103605118611489576102c0516307211ef76103a0526103005180607f1c612b96576103c0526103205180607f1c612b96576103e052610280516104005260206103a060646103bc845afa611472573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b6102c0516385f11d1e6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa6114ca573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b600361034051186115bf576001610360511861155f576102e0516307211ef76103a0526103005180607f1c612b96576103c0526103205180607f1c612b96576103e052610280516104005260206103a060646103bc845afa611548573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b6102c05163e9737ee26103a0526102e0516103c052610300516103e0526103205161040052610280516104205260206103a060846103bc845afa6115a8573d600060003e3d6000fd5b60203d10612b96576103a090505161028052611c98565b61034051600481186115d25760016115d8565b60058118155b90506117e95761034051600681186115f15760016115f7565b60078118155b905061173657600861034051186116cc576020612ba86000396000516102405118611623576001611635565b6020612ba86000396000516102605118155b611c985760246103a0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e206103c0527f57455448000000000000000000000000000000000000000000000000000000006103e0526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd611c9856611c98565b600d6103a0527f42616420737761702074797065000000000000000000000000000000000000006103c0526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd611c98565b60016103605118611799576102c05163cc2b27d76103c052610280516103e0526103205180607f1c612b96576104005260206103c060446103dc845afa611782573d600060003e3d6000fd5b60203d10612b96576103c090505161028052611c98565b6102c051634fb08c5e6103c052610280516103e052610320516104005260206103c060446103dc845afa6117d2573d600060003e3d6000fd5b60203d10612b96576103c090505161028052611c98565b600161036051186118d057610140366103c037610280516103005160098111612b965760051b6103c001526020612bc86000396000516379ccdf49610500526102c0516105205261026051610540526103c051610560526103e05161058052610400516105a052610420516105c052610440516105e052610460516106005261048051610620526104a051610640526104c051610660526104e05161068052610380516106a05260016106c05260016106e05260206105006101e461051c845afa6118b9573d600060003e3d6000fd5b60203d10612b965761050090505161028052611c98565b600261038051186119ab576040366103c037610280516103005160018111612b965760051b6103c0015260026103605118611955576102c051638d8ea727610400526103c051610420526103e051610440526020610400604461041c845afa61193e573d600060003e3d6000fd5b60203d10612b965761040090505161028052611c98565b6102c05163ed8e84f3610400526103c051610420526103e051610440526001610460526020610400606461041c845afa611994573d600060003e3d6000fd5b60203d10612b965761040090505161028052611c98565b60036103805118611a96576060366103c037610280516103005160028111612b965760051b6103c0015260026103605118611a38576102c051635b6f1b5a610420526103c051610440526103e0516104605261040051610480526020610420606461043c845afa611a21573d600060003e3d6000fd5b60203d10612b965761042090505161028052611c98565b6102c051633883e119610420526103c051610440526103e05161046052610400516104805260016104a0526020610420608461043c845afa611a7f573d600060003e3d6000fd5b60203d10612b965761042090505161028052611c98565b60046103805118611b91576080366103c037610280516103005160038111612b965760051b6103c0015260026103605118611b2b576102c051631a805185610440526103c051610460526103e05161048052610400516104a052610420516104c0526020610440608461045c845afa611b14573d600060003e3d6000fd5b60203d10612b965761044090505161028052611c98565b6102c05163cf701ff7610440526103c051610460526103e05161048052610400516104a052610420516104c05260016104e052602061044060a461045c845afa611b7a573d600060003e3d6000fd5b60203d10612b965761044090505161028052611c98565b60056103805118611c985760a0366103c037610280516103005160048111612b965760051b6103c0015260026103605118611c2e576102c0516309379690610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052602061046060a461047c845afa611c17573d600060003e3d6000fd5b60203d10612b965761046090505161028052611c98565b6102c051637ede89c5610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052600161052052602061046060c461047c845afa611c85573d600060003e3d6000fd5b60203d10612b9657610460905051610280525b60056102a05118611caa576001611cdc565b6102a0518060011b818160011c18612b9657905060018101818110612b96579050600a8111612b965760051b60400151155b15611ce657611cf9565b6102605161024052600101818118611265575b50506102805160018103818111612b965790506102a05260206102a0f35b63c07b53538118611d38576105443610612b96576101403661024037611e5d565b6381fc0ca58118611da8576105e43610612b9657610544358060a01c612b965761024052610564358060a01c612b965761026052610584358060a01c612b9657610280526105a4358060a01c612b96576102a0526105c4358060a01c612b96576102c05260a0366102e037611e5d565b6390e7e2058118612b92576106843610612b9657610544358060a01c612b965761024052610564358060a01c612b965761026052610584358060a01c612b9657610280526105a4358060a01c612b96576102a0526105c4358060a01c612b96576102c0526105e4358060a01c612b96576102e052610604358060a01c612b965761030052610624358060a01c612b965761032052610644358060a01c612b965761034052610664358060a01c612b9657610360525b6004358060a01c612b96576040526024358060a01c612b96576060526044358060a01c612b96576080526064358060a01c612b965760a0526084358060a01c612b965760c05260a4358060a01c612b965760e05260c4358060a01c612b96576101005260e4358060a01c612b965761012052610104358060a01c612b965761014052610124358060a01c612b965761016052610144358060a01c612b9657610180526104a4358060a01c612b96576101a0526104c4358060a01c612b96576101c0526104e4358060a01c612b96576101e052610504358060a01c612b965761020052610524358060a01c612b96576102205234612b96576104843561038052600160058101905b806103a0526103a0518060060360068111612b965790506103c0526103c0518060011b818160011c18612b9657905060018103818111612b96579050600a8111612b965760051b604001516103e0526103e051611fc057612b7f565b6103c05160018103818111612b965790508060011b818160011c18612b96579050600a8111612b965760051b60400151610400526103c0518060011b818160011c18612b96579050600a8111612b965760051b60400151610420526103c05160018103818111612b9657905060048111612b965760051b6101a00151610440526103c05160018103818111612b9657905060048111612b965760051b6102400151610460526103c05160018103818111612b9657905060048111612b965760051b6102e001516104805260a06103c05160018103818111612b9657905060048111612b9657026101640180356104a05260208101356104c05260408101356104e05260608101356105005260808101356105205250610520516105405260016104e051186122e75760016105005118612201576104605161217a576020612bc860003960005163158819d46105605261044051610580526104a05180607f1c612b96576105a0526104c05180607f1c612b96576105c052610380516105e0526105405161060052602061056060a461057c845afa612163573d600060003e3d6000fd5b60203d10612b965761056090505161038052612b7f565b6020612bc860003960005163571f00b56105605261044051610580526104a05180607f1c612b96576105a0526104c05180607f1c612b96576105c052610380516105e05261054051610600526104605161062052602061056060c461057c845afa6121ea573d600060003e3d6000fd5b60203d10612b965761056090505161038052612b7f565b610500516002811861221457600161221a565b60038118155b905061227857610440516337ed3a7a610560526104a051610580526104c0516105a052610380516105c0526020610560606461057c845afa612261573d600060003e3d6000fd5b60203d10612b965761056090505161038052612b7f565b6020612be860003960005163ca4bc71461058052610440516105a0526104a0516105c0526104c0516105e05261038051610600526105405161062052602061058060a461059c845afa6122d0573d600060003e3d6000fd5b60203d10612b965761058090505161038052612b7f565b6104e051600281186122fa576001612300565b60038118155b90506129e3576104e0516004811861231957600161231f565b60058118155b9050612930576104e0516006811861233857600161233e565b60078118155b905061247d5760086104e05118612413576020612ba8600039600051610400511861236a57600161237c565b6020612ba86000396000516104205118155b612b7f576024610560527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610580527f57455448000000000000000000000000000000000000000000000000000000006105a05261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd612b7f56612b7f565b600d610560527f42616420737761702074797065000000000000000000000000000000000000006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd612b7f565b60016105005118612564576101403661058037610380516104c05160098111612b965760051b61058001526020612bc86000396000516379ccdf496106c0526103e0516106e052610400516107005261058051610720526105a051610740526105c051610760526105e05161078052610600516107a052610620516107c052610640516107e052610660516108005261068051610820526106a05161084052610540516108605260006108805260016108a05260206106c06101e46106dc845afa61254d573d600060003e3d6000fd5b60203d10612b96576106c090505161038052612b7f565b6002610540511861263f5760403661058037610380516104c05160018111612b965760051b6105800152600261050051186125e9576103e051638d8ea7276105c052610580516105e0526105a0516106005260206105c060446105dc845afa6125d2573d600060003e3d6000fd5b60203d10612b96576105c090505161038052612b7f565b6103e05163ed8e84f36105c052610580516105e0526105a0516106005260006106205260206105c060646105dc845afa612628573d600060003e3d6000fd5b60203d10612b96576105c090505161038052612b7f565b6003610540511861272a5760603661058037610380516104c05160028111612b965760051b6105800152600261050051186126cc576103e051635b6f1b5a6105e05261058051610600526105a051610620526105c0516106405260206105e060646105fc845afa6126b5573d600060003e3d6000fd5b60203d10612b96576105e090505161038052612b7f565b6103e051633883e1196105e05261058051610600526105a051610620526105c0516106405260006106605260206105e060846105fc845afa612713573d600060003e3d6000fd5b60203d10612b96576105e090505161038052612b7f565b600461054051186128255760803661058037610380516104c05160038111612b965760051b6105800152600261050051186127bf576103e051631a8051856106005261058051610620526105a051610640526105c051610660526105e051610680526020610600608461061c845afa6127a8573d600060003e3d6000fd5b60203d10612b965761060090505161038052612b7f565b6103e05163cf701ff76106005261058051610620526105a051610640526105c051610660526105e0516106805260006106a052602061060060a461061c845afa61280e573d600060003e3d6000fd5b60203d10612b965761060090505161038052612b7f565b60056105405118612b7f5760a03661058037610380516104c05160048111612b965760051b6105800152600261050051186128c2576103e05163093796906106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c052602061062060a461063c845afa6128ab573d600060003e3d6000fd5b60203d10612b965761062090505161038052612b7f565b6103e051637ede89c56106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c05260006106e052602061062060c461063c845afa612919573d600060003e3d6000fd5b60203d10612b965761062090505161038052612b7f565b60016105005118612993576103e05163cc2b27d761058052610380516105a0526104a05180607f1c612b96576105c0526020610580604461059c845afa61297c573d600060003e3d6000fd5b60203d10612b965761058090505161038052612b7f565b6103e051634fb08c5e61058052610380516105a0526104a0516105c0526020610580604461059c845afa6129cc573d600060003e3d6000fd5b60203d10612b965761058090505161038052612b7f565b60016105005118612b045761046051612a75576020612bc8600039600051638fd3218f61058052610440516105a0526104a05180607f1c612b96576105c0526104c05180607f1c612b96576105e05261038051610600526105405161062052602061058060a461059c845afa612a5e573d600060003e3d6000fd5b60203d10612b965761058090505161038052612b7f565b6020612bc8600039600051634933a86461058052610440516105a0526104a05180607f1c612b96576105c0526104c05180607f1c612b96576105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa612aed573d600060003e3d6000fd5b60203d10612b965761058090505161038052612b7f565b6020612be8600039600051638ca1565361058052610440516105a0526104a0516105c0526104c0516105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa612b6c573d600060003e3d6000fd5b60203d10612b9657610580905051610380525b600101818118611f645750506020610380f35b505b005b600080fda165767970657283000307000b00000000000000000000000042000000000000000000000000000000000000060000000000000000000000005552b631e2ad801faa129aacf4b701071cc9d1f7000000000000000000000000efaddde5b43917ccc738ade6962295a0b343f7ce

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

00000000000000000000000042000000000000000000000000000000000000060000000000000000000000005552b631e2ad801faa129aacf4b701071cc9d1f7000000000000000000000000efaddde5b43917ccc738ade6962295a0b343f7ce

-----Decoded View---------------
Arg [0] : _weth (address): 0x4200000000000000000000000000000000000006
Arg [1] : _stable_calc (address): 0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7
Arg [2] : _crypto_calc (address): 0xEfadDdE5B43917CcC738AdE6962295A0B343f7CE

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004200000000000000000000000000000000000006
Arg [1] : 0000000000000000000000005552b631e2ad801faa129aacf4b701071cc9d1f7
Arg [2] : 000000000000000000000000efaddde5b43917ccc738ade6962295a0b343f7ce


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.