ETH Price: $2,657.92 (+1.50%)

Contract

0x652511eBd2C77AA00BC3F0b910928418708aD2Ee
 
Transaction Hash
Method
Block
From
To
Swap Tokens96195482020-03-06 19:23:431800 days ago1583522623IN
0x652511eB...8708aD2Ee
0 ETH0.000238631
Remove Liquidity96190082020-03-06 17:24:521800 days ago1583515492IN
0x652511eB...8708aD2Ee
0 ETH0.000217251.25611615
Swap Tokens93920782020-01-31 20:03:251835 days ago1580501005IN
0x652511eB...8708aD2Ee
0 ETH0.000334041.5
Update Price Ora...90716832019-12-08 12:14:251889 days ago1575807265IN
0x652511eB...8708aD2Ee
0 ETH0.000140274.8469314
Update Input Tok...90716162019-12-08 11:54:051889 days ago1575806045IN
0x652511eB...8708aD2Ee
0 ETH0.000149356.52996389
Update Price Ora...90715892019-12-08 11:46:571889 days ago1575805617IN
0x652511eB...8708aD2Ee
0 ETH0.000148015.11407942
Update Price Ora...90052702019-11-26 16:59:551901 days ago1574787595IN
0x652511eB...8708aD2Ee
0 ETH0.0003550812
Update Input Tok...90052492019-11-26 16:53:051901 days ago1574787185IN
0x652511eB...8708aD2Ee
0 ETH0.0005513112
Update Price Ora...90051502019-11-26 16:29:211901 days ago1574785761IN
0x652511eB...8708aD2Ee
0 ETH0.0003550812
Update Price Ora...90051282019-11-26 16:24:081901 days ago1574785448IN
0x652511eB...8708aD2Ee
0 ETH0.0003562212.03863167
Update Output To...90051152019-11-26 16:21:151901 days ago1574785275IN
0x652511eB...8708aD2Ee
0 ETH0.0005610712.20464304
Remove Liquidity89969242019-11-25 6:11:161903 days ago1574662276IN
0x652511eB...8708aD2Ee
0 ETH0.0027422722
Remove Liquidity89969162019-11-25 6:10:021903 days ago1574662202IN
0x652511eB...8708aD2Ee
0 ETH0.0032482722
Remove Liquidity89752452019-11-21 15:54:011906 days ago1574351641IN
0x652511eB...8708aD2Ee
0 ETH0.0014077311
Remove Liquidity89721352019-11-21 3:28:591907 days ago1574306939IN
0x652511eB...8708aD2Ee
0 ETH0.001211210
Add Liquidity89721152019-11-21 3:23:491907 days ago1574306629IN
0x652511eB...8708aD2Ee
0 ETH0.001461610
Remove Liquidity89709752019-11-20 22:57:211907 days ago1574290641IN
0x652511eB...8708aD2Ee
0 ETH0.000149211
Swap Tokens89628642019-11-19 14:20:501908 days ago1574173250IN
0x652511eB...8708aD2Ee
0 ETH0.0016658811
Swap Tokens89624282019-11-19 12:31:021908 days ago1574166662IN
0x652511eB...8708aD2Ee
0 ETH0.00207110.9
Update Price Ora...89623682019-11-19 12:15:281908 days ago1574165728IN
0x652511eB...8708aD2Ee
0 ETH0.0003225310.9
Update Output To...89623312019-11-19 12:05:261908 days ago1574165126IN
0x652511eB...8708aD2Ee
0 ETH0.0004975410.9
Update Input Tok...89623252019-11-19 12:04:431908 days ago1574165083IN
0x652511eB...8708aD2Ee
0 ETH0.0004972210.9
Update Output To...89623142019-11-19 12:02:191908 days ago1574164939IN
0x652511eB...8708aD2Ee
0 ETH0.0001727310.9
Update Input Tok...89623132019-11-19 12:02:061908 days ago1574164926IN
0x652511eB...8708aD2Ee
0 ETH0.0001724110.9
Swap Tokens89622922019-11-19 11:58:461908 days ago1574164726IN
0x652511eB...8708aD2Ee
0 ETH0.0019112210.9
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:
Vyper_contract

Compiler Version
vyper:0.1.0b11

Optimization Enabled:
N/A

Other Settings:
default evmVersion, None license

Contract Source Code (Vyper language format)

contract ERC20():
    def transfer(_to: address, _value: uint256) -> bool: modifying
    def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying
    def balanceOf(_owner: address) -> uint256: constant
    def allowance(_owner: address, _spender: address) -> uint256: constant
    def decimals() -> uint256: constant

contract PriceOracle():
    def poolSize(contract_address: address) -> uint256: constant
    def normalized_token_prices(token_address: address) -> uint256: constant

TOKEN_PRICE_MULTIPLIER: constant(uint256) = 100000000
FEE_MULTIPLIER: constant(uint256) = 100000
EXCHANGE_RATE_MULTIPLIER: constant(uint256) = 10000000000000000000000 #10**22

# ERC20 events
Transfer: event({_from: indexed(address), _to: indexed(address), _value: uint256})
Approval: event({_owner: indexed(address), _spender: indexed(address), _value: uint256})

OwnershipTransferred: event({previous_owner: indexed(address), new_owner: indexed(address)})
LiquidityAdded: event({provider: indexed(address), amount: indexed(uint256)})
LiquidityRemoved: event({provider: indexed(address), amount: indexed(uint256)})
Trade: event({input_token: indexed(address), output_token: indexed(address), input_amount: indexed(uint256)})
PermissionUpdated: event({name: indexed(string[32]), value: indexed(bool)})
FeeUpdated: event({name: indexed(string[32]), value: indexed(decimal)})
PriceOracleAddressUpdated: event({new_address: indexed(address)})

name: public(string[32])                                 # Stablecoinswap
symbol: public(string[6])                                # STL
owner: public(address)                                   # contract owner
decimals: public(uint256)                                # 18
totalSupply: public(uint256)                             # total number of contract tokens in existence
balanceOf: public(map(address, uint256))                 # balance of an address
allowance: public(map(address, map(address, uint256)))   # allowance of one address on another
inputTokens: public(map(address, bool))                  # addresses of the ERC20 tokens allowed to transfer into this contract
outputTokens: public(map(address, bool))                 # addresses of the ERC20 tokens allowed to transfer out of this contract
permissions: public(map(string[32], bool))               # pause / resume contract functions
feesInt: map(string[32], uint256)                        # trade / pool fees multiplied by FEE_MULTIPLIER
priceOracleAddress: public(address)                      # address of price oracle

@public
def __init__(token_addresses: address[3], price_oracle_addr: address):
    assert price_oracle_addr != ZERO_ADDRESS

    self.owner = msg.sender
    self.name = "Stablecoinswap"
    self.symbol = "STL"
    self.decimals = 18
    self.permissions["tradingAllowed"] = True
    self.permissions["liquidityAddingAllowed"] = True

    for i in range(3):
        assert token_addresses[i] != ZERO_ADDRESS
        self.inputTokens[token_addresses[i]] = True
        self.outputTokens[token_addresses[i]] = True

    self.feesInt['tradeFee'] = 200
    self.feesInt['ownerFee'] = 100

    self.priceOracleAddress = price_oracle_addr

@private
@constant
def tokenPrice(token_address: address) -> uint256:
    token_price: uint256 = PriceOracle(self.priceOracleAddress).normalized_token_prices(token_address)
    assert token_price > 0

    return token_price

# Deposit erc20 token
@public
@nonreentrant('lock')
def addLiquidity(token_address: address, erc20_token_amount: uint256, deadline: timestamp) -> uint256:
    assert self.inputTokens[token_address]
    assert deadline > block.timestamp and erc20_token_amount > 0
    assert self.permissions["liquidityAddingAllowed"]

    token_price: uint256 = self.tokenPrice(token_address)
    # It's better to divide at the very end for a higher precision
    new_liquidity: uint256 = token_price * erc20_token_amount / TOKEN_PRICE_MULTIPLIER
    if self.totalSupply > 0:
        new_liquidity = new_liquidity * self.totalSupply / PriceOracle(self.priceOracleAddress).poolSize(self)
    else:
        assert new_liquidity >= 1000000000

    self.balanceOf[msg.sender] += new_liquidity
    self.totalSupply += new_liquidity

    # Can't assert the result directly: https://github.com/ethereum/vyper/issues/1468
    transfer_from_result: bool = ERC20(token_address).transferFrom(msg.sender, self, erc20_token_amount)
    assert transfer_from_result

    log.LiquidityAdded(msg.sender, new_liquidity)

    return new_liquidity

# Withdraw erc20 token
@public
@nonreentrant('lock')
def removeLiquidity(token_address: address, stableswap_token_amount: uint256, erc20_min_output_amount: uint256, deadline: timestamp) -> uint256:
    assert self.outputTokens[token_address]
    assert stableswap_token_amount > 0 and deadline > block.timestamp
    assert self.balanceOf[msg.sender] >= stableswap_token_amount
    assert self.totalSupply > 0

    token_price: uint256 = self.tokenPrice(token_address)
    pool_size: uint256 = PriceOracle(self.priceOracleAddress).poolSize(self)
    # erc20_token_amount = stableswap_token_amount * pool_size / totalSupply / token_price * TOKEN_PRICE_MULTIPLIER
    # It's better to divide at the very end for a higher precision
    erc20_token_amount: uint256 = stableswap_token_amount * pool_size / self.totalSupply

    ownerFee: uint256 = 0

    if msg.sender != self.owner:
        ownerFee = stableswap_token_amount * self.feesInt['ownerFee'] / FEE_MULTIPLIER
        multiplier_after_fees: uint256 = FEE_MULTIPLIER - self.feesInt['ownerFee'] - self.feesInt['tradeFee']
        erc20_token_amount = erc20_token_amount * multiplier_after_fees / FEE_MULTIPLIER

    erc20_token_amount = erc20_token_amount * TOKEN_PRICE_MULTIPLIER / token_price

    self.balanceOf[msg.sender] -= stableswap_token_amount
    self.balanceOf[self.owner] += ownerFee
    self.totalSupply -= stableswap_token_amount - ownerFee

    assert erc20_token_amount >= erc20_min_output_amount

    # Can't assert the result directly: https://github.com/ethereum/vyper/issues/1468
    transfer_result: bool = ERC20(token_address).transfer(msg.sender, erc20_token_amount)
    assert transfer_result

    log.LiquidityRemoved(msg.sender, stableswap_token_amount)

    return erc20_token_amount

# Note that due to rounding, the fees could be slightly higher for the tokens with smaller decimal precision.
@public
@constant
def tokenExchangeRateAfterFees(input_token_address: address, output_token_address: address) -> uint256:
    input_token_price: uint256 = self.tokenPrice(input_token_address)
    output_token_price: uint256 = self.tokenPrice(output_token_address)

    multiplier_after_fees: uint256 = FEE_MULTIPLIER - self.feesInt['ownerFee'] - self.feesInt['tradeFee']
    exchange_rate: uint256 = EXCHANGE_RATE_MULTIPLIER * input_token_price * multiplier_after_fees / FEE_MULTIPLIER / output_token_price

    return exchange_rate

@public
@constant
def tokenOutputAmountAfterFees(input_token_amount: uint256, input_token_address: address, output_token_address: address) -> uint256:
    output_token_amount: uint256 = input_token_amount * self.tokenExchangeRateAfterFees(input_token_address, output_token_address) / EXCHANGE_RATE_MULTIPLIER
    return output_token_amount

# Trade one erc20 token for another
@public
@nonreentrant('lock')
def swapTokens(input_token: address, output_token: address, erc20_input_amount: uint256, erc20_min_output_amount: uint256, deadline: timestamp) -> uint256:
    assert self.inputTokens[input_token] and self.outputTokens[output_token]
    assert erc20_input_amount > 0 and erc20_min_output_amount > 0
    assert deadline > block.timestamp
    assert self.permissions["tradingAllowed"]

    input_token_price: uint256 = self.tokenPrice(input_token)
    # input_usd_value is a value of input multiplied by TOKEN_PRICE_MULTIPLIER
    input_usd_value: uint256 = erc20_input_amount * input_token_price
    tradeFee: uint256 = input_usd_value * self.feesInt['tradeFee'] / FEE_MULTIPLIER / TOKEN_PRICE_MULTIPLIER
    ownerFee: uint256 = input_usd_value * self.feesInt['ownerFee'] / FEE_MULTIPLIER / TOKEN_PRICE_MULTIPLIER

    pool_size_after_swap: uint256 = PriceOracle(self.priceOracleAddress).poolSize(self) + tradeFee
    new_owner_shares: uint256 = self.totalSupply * ownerFee / pool_size_after_swap

    erc20_output_amount: uint256 = self.tokenOutputAmountAfterFees(erc20_input_amount, input_token, output_token)
    assert erc20_output_amount >= erc20_min_output_amount

    self.balanceOf[self.owner] += new_owner_shares
    self.totalSupply += new_owner_shares

    # Can't assert the result directly: https://github.com/ethereum/vyper/issues/1468
    transfer_from_result: bool = ERC20(input_token).transferFrom(msg.sender, self, erc20_input_amount)
    assert transfer_from_result
    transfer_result: bool = ERC20(output_token).transfer(msg.sender, erc20_output_amount)
    assert transfer_result

    log.Trade(input_token, output_token, erc20_input_amount)

    return erc20_output_amount

@public
def updateInputToken(token_address: address, allowed: bool) -> bool:
    assert msg.sender == self.owner
    assert not self.inputTokens[token_address] == allowed
    assert ERC20(token_address).decimals() >= 2
    self.inputTokens[token_address] = allowed
    return True

@public
def updateOutputToken(token_address: address, allowed: bool) -> bool:
    assert msg.sender == self.owner
    assert not self.outputTokens[token_address] == allowed
    assert ERC20(token_address).decimals() >= 2
    self.outputTokens[token_address] = allowed
    return True

@public
def updatePermission(permission_name: string[32], value: bool) -> bool:
    assert msg.sender == self.owner
    self.permissions[permission_name] = value
    log.PermissionUpdated(permission_name, value)
    return True

# Return share of total liquidity belonging to the user
@public
@constant
def poolOwnership(user_address: address) -> decimal:
    user_balance: decimal = convert(self.balanceOf[user_address], decimal)
    total_liquidity: decimal = convert(self.totalSupply, decimal)
    share: decimal = user_balance / total_liquidity
    return share

@public
def transferOwnership(new_owner: address) -> bool:
    assert new_owner != ZERO_ADDRESS
    assert msg.sender == self.owner
    self.owner = new_owner
    log.OwnershipTransferred(self.owner, new_owner)
    return True

@public
def updateFee(fee_name: string[32], value: decimal) -> bool:
    assert msg.sender == self.owner
    self.feesInt[fee_name] = convert(floor(value * convert(FEE_MULTIPLIER, decimal)), uint256)
    log.FeeUpdated(fee_name, value)
    return True

@public
@constant
def fees(fee_name: string[32]) -> decimal:
    return convert(self.feesInt[fee_name], decimal) / convert(FEE_MULTIPLIER, decimal)

@public
def updatePriceOracleAddress(new_address: address) -> bool:
    assert msg.sender == self.owner
    self.priceOracleAddress = new_address
    log.PriceOracleAddressUpdated(new_address)
    return True

# ERC-20 functions

@public
def transfer(_to: address, _value: uint256) -> bool:
    self.balanceOf[msg.sender] -= _value
    self.balanceOf[_to] += _value
    log.Transfer(msg.sender, _to, _value)
    return True

@public
def transferFrom(_from: address, _to: address, _value: uint256) -> bool:
    self.balanceOf[_from] -= _value
    self.balanceOf[_to] += _value
    self.allowance[_from][msg.sender] -= _value
    log.Transfer(_from, _to, _value)
    return True

@public
def approve(_spender: address, _value: uint256) -> bool:
    self.allowance[msg.sender][_spender] = _value
    log.Approval(msg.sender, msg.sender, _value)
    return True

Contract Security Audit

Contract ABI

[{"name":"Transfer","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false,"type":"event"},{"name":"Approval","inputs":[{"type":"address","name":"_owner","indexed":true},{"type":"address","name":"_spender","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false,"type":"event"},{"name":"OwnershipTransferred","inputs":[{"type":"address","name":"previous_owner","indexed":true},{"type":"address","name":"new_owner","indexed":true}],"anonymous":false,"type":"event"},{"name":"LiquidityAdded","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"amount","indexed":true}],"anonymous":false,"type":"event"},{"name":"LiquidityRemoved","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"amount","indexed":true}],"anonymous":false,"type":"event"},{"name":"Trade","inputs":[{"type":"address","name":"input_token","indexed":true},{"type":"address","name":"output_token","indexed":true},{"type":"uint256","name":"input_amount","indexed":true}],"anonymous":false,"type":"event"},{"name":"PermissionUpdated","inputs":[{"type":"string32","name":"name","indexed":true},{"type":"bool","name":"value","indexed":true}],"anonymous":false,"type":"event"},{"name":"FeeUpdated","inputs":[{"type":"string32","name":"name","indexed":true},{"type":"fixed168x10","name":"value","indexed":true}],"anonymous":false,"type":"event"},{"name":"PriceOracleAddressUpdated","inputs":[{"type":"address","name":"new_address","indexed":true}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[3]","name":"token_addresses"},{"type":"address","name":"price_oracle_addr"}],"constant":false,"payable":false,"type":"constructor"},{"name":"addLiquidity","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"address","name":"token_address"},{"type":"uint256","name":"erc20_token_amount"},{"type":"uint256","unit":"sec","name":"deadline"}],"constant":false,"payable":false,"type":"function","gas":157451},{"name":"removeLiquidity","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"address","name":"token_address"},{"type":"uint256","name":"stableswap_token_amount"},{"type":"uint256","name":"erc20_min_output_amount"},{"type":"uint256","unit":"sec","name":"deadline"}],"constant":false,"payable":false,"type":"function","gas":198544},{"name":"tokenExchangeRateAfterFees","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"address","name":"input_token_address"},{"type":"address","name":"output_token_address"}],"constant":true,"payable":false,"type":"function","gas":9501},{"name":"tokenOutputAmountAfterFees","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"uint256","name":"input_token_amount"},{"type":"address","name":"input_token_address"},{"type":"address","name":"output_token_address"}],"constant":true,"payable":false,"type":"function","gas":15890},{"name":"swapTokens","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"address","name":"input_token"},{"type":"address","name":"output_token"},{"type":"uint256","name":"erc20_input_amount"},{"type":"uint256","name":"erc20_min_output_amount"},{"type":"uint256","unit":"sec","name":"deadline"}],"constant":false,"payable":false,"type":"function","gas":195199},{"name":"updateInputToken","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"token_address"},{"type":"bool","name":"allowed"}],"constant":false,"payable":false,"type":"function","gas":37622},{"name":"updateOutputToken","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"token_address"},{"type":"bool","name":"allowed"}],"constant":false,"payable":false,"type":"function","gas":37652},{"name":"updatePermission","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"string","name":"permission_name"},{"type":"bool","name":"value"}],"constant":false,"payable":false,"type":"function","gas":37869},{"name":"poolOwnership","outputs":[{"type":"fixed168x10","name":"out"}],"inputs":[{"type":"address","name":"user_address"}],"constant":true,"payable":false,"type":"function","gas":1447},{"name":"transferOwnership","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"new_owner"}],"constant":false,"payable":false,"type":"function","gas":37769},{"name":"updateFee","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"string","name":"fee_name"},{"type":"fixed168x10","name":"value"}],"constant":false,"payable":false,"type":"function","gas":37923},{"name":"fees","outputs":[{"type":"fixed168x10","name":"out"}],"inputs":[{"type":"string","name":"fee_name"}],"constant":true,"payable":false,"type":"function","gas":1421},{"name":"updatePriceOracleAddress","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"new_address"}],"constant":false,"payable":false,"type":"function","gas":37184},{"name":"transfer","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":74440},{"name":"transferFrom","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":110307},{"name":"approve","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":38171},{"name":"name","outputs":[{"type":"string","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":6822},{"name":"symbol","outputs":[{"type":"string","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2978},{"name":"owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1083},{"name":"decimals","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1113},{"name":"totalSupply","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1143},{"name":"balanceOf","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"address","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1327},{"name":"allowance","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"address","name":"arg0"},{"type":"address","name":"arg1"}],"constant":true,"payable":false,"type":"function","gas":1511},{"name":"inputTokens","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1387},{"name":"outputTokens","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1417},{"name":"permissions","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"string","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1590},{"name":"priceOracleAddress","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1323}]

740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052608061274d6101403934156100a157600080fd5b602061274d60c03960c05160205181106100ba57600080fd5b506020602061274d0160c03960c05160205181106100d757600080fd5b506020604061274d0160c03960c05160205181106100f457600080fd5b506020606061274d0160c03960c051602051811061011157600080fd5b5060006101a0511861012257600080fd5b33600255600e6101c0527f537461626c65636f696e737761700000000000000000000000000000000000006101e0526101c080600060c052602060c020602082510161012060006002818352015b82610120516020021115610183576101a5565b61012051602002850151610120518501555b8151600101808352811415610170575b5050505050506003610220527f53544c00000000000000000000000000000000000000000000000000000000006102405261022080600160c052602060c020602082510161012060006002818352015b826101205160200211156102085761022a565b61012051602002850151610120518501555b81516001018083528114156101f5575b505050505050601260035560016009600e610280527f74726164696e67416c6c6f7765640000000000000000000000000000000000006102a0526102805150610280516102a02060e05260c052604060c020556001600960166102e0527f6c6971756964697479416464696e67416c6c6f77656400000000000000000000610300526102e051506102e0516103002060e05260c052604060c0205561034060006003818352015b600061014061034051600381106102e757600080fd5b6020020151186102f657600080fd5b60016007610140610340516003811061030e57600080fd5b602002015160e05260c052604060c0205560016008610140610340516003811061033757600080fd5b602002015160e05260c052604060c020555b81516001018083528114156102d1575b505060c8600a6008610360527f7472616465466565000000000000000000000000000000000000000000000000610380526103605150610360516103802060e05260c052604060c020556064600a60086103c0527f6f776e65724665650000000000000000000000000000000000000000000000006103e0526103c051506103c0516103e02060e05260c052604060c020556101a051600b5561273556600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052600015610114575b6101605261014052600b543b6100b057600080fd5b600b5430186100be57600080fd5b6020610220602463f1bb10866101a052610140516101c0526101bc600b545afa6100e757600080fd5b60005061022051610180526000610180511161010257600080fd5b61018051600052600051610160515650005b6355776b77600051141561041e5762ffffff541561013157600080fd5b600162ffffff55341561014357600080fd5b600435602051811061015457600080fd5b50600760043560e05260c052604060c0205461016f57600080fd5b60006024351142604435111661018457600080fd5b60096016610140527f6c6971756964697479416464696e67416c6c6f77656400000000000000000000610160526101405150610140516101602060e05260c052604060c020546101d357600080fd5b6101405161016051610180516101a0516384ba3f696101e05260043561020052610200516006580161009b565b610260526101a052610180526101605261014052610260516101a0526305f5e10061022a57600080fd5b6305f5e1006101a0511515610240576000610263565b6024356101a0516024356101a05102041461025a57600080fd5b6024356101a051025b04610280526000600454111561030e57600b543b61028057600080fd5b600b54301861028e57600080fd5b6020610320602463fa75d1606102a052306102c0526102bc600b545afa6102b457600080fd5b6000506103205161034052610340516102cc57600080fd5b610340516102805115156102e1576000610304565b60045461028051600454610280510204146102fb57600080fd5b60045461028051025b0461028052610323565b633b9aca0061028051101561032257600080fd5b5b60053360e05260c052604060c020805461028051825401101561034557600080fd5b610280518154018155506004805461028051825401101561036557600080fd5b610280518154018155506004353b61037c57600080fd5b600435301861038a57600080fd5b602061044060646323b872dd61038052336103a052306103c0526024356103e05261039c60006004355af16103be57600080fd5b6000506104405161036052610360516103d657600080fd5b61028051337fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb31208860006000a361028051600052600062ffffff5560206000f350600062ffffff55005b6393ca2f8a6000511415610a715762ffffff541561043b57600080fd5b600162ffffff55341561044d57600080fd5b600435602051811061045e57600080fd5b50600860043560e05260c052604060c0205461047957600080fd5b42606435116000602435111661048e57600080fd5b60243560053360e05260c052604060c0205410156104ab57600080fd5b6000600454116104ba57600080fd5b610140516384ba3f69610180526004356101a0526101a0516006580161009b565b61020052610140526102005161014052600b543b6104f857600080fd5b600b54301861050657600080fd5b60206102c0602463fa75d16061024052306102605261025c600b545afa61052c57600080fd5b6000506102c0516102205260045461054357600080fd5b6004546024351515610556576000610579565b610220516024356102205160243502041461057057600080fd5b61022051602435025b046102e0526000610300526002543318156108c757620186a061059b57600080fd5b620186a060243515156105af576000610698565b600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054602435600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c0205460243502041461064d57600080fd5b600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054602435025b0461030052600a6008610400527f7472616465466565000000000000000000000000000000000000000000000000610420526104005150610400516104202060e05260c052604060c02054600a60086103a0527f6f776e65724665650000000000000000000000000000000000000000000000006103c0526103a051506103a0516103c02060e05260c052604060c02054620186a0101561073857600080fd5b600a60086103a0527f6f776e65724665650000000000000000000000000000000000000000000000006103c0526103a051506103a0516103c02060e05260c052604060c02054620186a003101561078e57600080fd5b600a6008610400527f7472616465466565000000000000000000000000000000000000000000000000610420526104005150610400516104202060e05260c052604060c02054600a60086103a0527f6f776e65724665650000000000000000000000000000000000000000000000006103c0526103a051506103a0516103c02060e05260c052604060c02054620186a0101561082957600080fd5b600a60086103a0527f6f776e65724665650000000000000000000000000000000000000000000000006103c0526103a051506103a0516103c02060e05260c052604060c02054620186a0030361038052620186a061088657600080fd5b620186a06102e051151561089b5760006108c1565b610380516102e051610380516102e0510204146108b757600080fd5b610380516102e051025b046102e0525b610140516108d457600080fd5b610140516102e05115156108e9576000610912565b6305f5e1006102e0516305f5e1006102e05102041461090757600080fd5b6305f5e1006102e051025b046102e05260053360e05260c052604060c0206024358154101561093557600080fd5b602435815403815550600560025460e05260c052604060c020805461030051825401101561096257600080fd5b61030051815401815550600461030051602435101561098057600080fd5b61030051602435038154101561099557600080fd5b6103005160243510156109a757600080fd5b61030051602435038154038155506044356102e05110156109c757600080fd5b6004353b6109d457600080fd5b60043530186109e257600080fd5b6020610520604463a9059cbb61048052336104a0526102e0516104c05261049c60006004355af1610a1257600080fd5b600050610520516104605261046051610a2a57600080fd5b602435337fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf984017171960006000a36102e051600052600062ffffff5560206000f350600062ffffff55005b6391b26ae06000511415610ece573415610a8a57600080fd5b6004356020518110610a9b57600080fd5b506024356020518110610aad57600080fd5b50610140516384ba3f69610180526004356101a0526101a0516006580161009b565b610200526101405261020051610140526101405161016051610180516101a0516101c0516101e05161020051610220516384ba3f696102605260243561028052610280516006580161009b565b6102e05261022052610200526101e0526101c0526101a0526101805261016052610140526102e05161022052600a6008610380527f74726164654665650000000000000000000000000000000000000000000000006103a0526103805150610380516103a02060e05260c052604060c02054600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054620186a01015610be357600080fd5b600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054620186a0031015610c3957600080fd5b600a6008610380527f74726164654665650000000000000000000000000000000000000000000000006103a0526103805150610380516103a02060e05260c052604060c02054600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054620186a01015610cd457600080fd5b600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054620186a003036103005261022051610d3157600080fd5b61022051620186a0610d4257600080fd5b620186a069021e19e0c9bab24000001515610d5e576000610d99565b6101405169021e19e0c9bab24000006101405169021e19e0c9bab2400000020414610d8857600080fd5b6101405169021e19e0c9bab2400000025b1515610da6576000610eb9565b6103005169021e19e0c9bab24000001515610dc2576000610dfd565b6101405169021e19e0c9bab24000006101405169021e19e0c9bab2400000020414610dec57600080fd5b6101405169021e19e0c9bab2400000025b6103005169021e19e0c9bab24000001515610e19576000610e54565b6101405169021e19e0c9bab24000006101405169021e19e0c9bab2400000020414610e4357600080fd5b6101405169021e19e0c9bab2400000025b020414610e6057600080fd5b6103005169021e19e0c9bab24000001515610e7c576000610eb7565b6101405169021e19e0c9bab24000006101405169021e19e0c9bab2400000020414610ea657600080fd5b6101405169021e19e0c9bab2400000025b025b04046103e0526103e05160005260206000f350005b63126603b56000511415610fa8573415610ee757600080fd5b6024356020518110610ef857600080fd5b506044356020518110610f0a57600080fd5b5069021e19e0c9bab2400000610f1f57600080fd5b69021e19e0c9bab2400000602061020060446391b26ae061016052602435610180526044356101a05261017c6000305af1610f5957600080fd5b61020051610220526004351515610f71576000610f94565b6102205160043561022051600435020414610f8b57600080fd5b61022051600435025b04610140526101405160005260206000f350005b6343d91bf160005114156115d65762ffffff5415610fc557600080fd5b600162ffffff553415610fd757600080fd5b6004356020518110610fe857600080fd5b506024356020518110610ffa57600080fd5b50600860243560e05260c052604060c02054600760043560e05260c052604060c020541661102757600080fd5b6000606435116000604435111661103d57600080fd5b426084351161104b57600080fd5b6009600e610140527f74726164696e67416c6c6f776564000000000000000000000000000000000000610160526101405150610140516101602060e05260c052604060c0205461109a57600080fd5b6101405161016051610180516101a0516384ba3f696101e05260043561020052610200516006580161009b565b610260526101a052610180526101605261014052610260516101a05260443515156110f3576000611116565b6101a0516044356101a05160443502041461110d57600080fd5b6101a051604435025b610280526305f5e10061112857600080fd5b6305f5e100620186a061113a57600080fd5b620186a061028051151561114f57600061123b565b600a60086102c0527f74726164654665650000000000000000000000000000000000000000000000006102e0526102c051506102c0516102e02060e05260c052604060c0205461028051600a60086102c0527f74726164654665650000000000000000000000000000000000000000000000006102e0526102c051506102c0516102e02060e05260c052604060c02054610280510204146111ef57600080fd5b600a60086102c0527f74726164654665650000000000000000000000000000000000000000000000006102e0526102c051506102c0516102e02060e05260c052604060c0205461028051025b04046102a0526305f5e10061124f57600080fd5b6305f5e100620186a061126157600080fd5b620186a0610280511515611276576000611362565b600a6008610340527f6f776e6572466565000000000000000000000000000000000000000000000000610360526103405150610340516103602060e05260c052604060c0205461028051600a6008610340527f6f776e6572466565000000000000000000000000000000000000000000000000610360526103405150610340516103602060e05260c052604060c020546102805102041461131657600080fd5b600a6008610340527f6f776e6572466565000000000000000000000000000000000000000000000000610360526103405150610340516103602060e05260c052604060c0205461028051025b040461032052600b543b61137557600080fd5b600b54301861138357600080fd5b6020610440602463fa75d1606103c052306103e0526103dc600b545afa6113a957600080fd5b6000506104405161046052610460516102a051610460510110156113cc57600080fd5b6102a05161046051016103a0526103a0516113e657600080fd5b6103a05160045415156113fa57600061141d565b610320516004546103205160045402041461141457600080fd5b61032051600454025b04610480526020610580606463126603b56104c0526044356104e05260043561050052602435610520526104dc6000305af161145857600080fd5b610580516104a0526064356104a051101561147257600080fd5b600560025460e05260c052604060c020805461048051825401101561149657600080fd5b61048051815401815550600480546104805182540110156114b657600080fd5b610480518154018155506004353b6114cd57600080fd5b60043530186114db57600080fd5b602061068060646323b872dd6105c052336105e0523061060052604435610620526105dc60006004355af161150f57600080fd5b600050610680516105a0526105a05161152757600080fd5b6024353b61153457600080fd5b602435301861154257600080fd5b6020610760604463a9059cbb6106c052336106e0526104a051610700526106dc60006024355af161157257600080fd5b600050610760516106a0526106a05161158a57600080fd5b6044356024356004357f0d49f50d6dd629f4e4070731edb0abd680823ab1cbd43d89590522da4b5b32e760006000a46104a051600052600062ffffff5560206000f350600062ffffff55005b6323d7d1a860005114156116b05734156115ef57600080fd5b600435602051811061160057600080fd5b506024356002811061161157600080fd5b50600254331461162057600080fd5b602435600760043560e05260c052604060c02054141561163f57600080fd5b60026004353b61164e57600080fd5b600435301861165c57600080fd5b60206101a0600463313ce5676101405261015c6004355afa61167d57600080fd5b6000506101a051101561168f57600080fd5b602435600760043560e05260c052604060c02055600160005260206000f350005b6344dbd334600051141561178a5734156116c957600080fd5b60043560205181106116da57600080fd5b50602435600281106116eb57600080fd5b5060025433146116fa57600080fd5b602435600860043560e05260c052604060c02054141561171957600080fd5b60026004353b61172857600080fd5b600435301861173657600080fd5b60206101a0600463313ce5676101405261015c6004355afa61175757600080fd5b6000506101a051101561176957600080fd5b602435600860043560e05260c052604060c02055600160005260206000f350005b63903a1001600051141561186c5734156117a357600080fd5b60406004356004016101403760206004356004013511156117c357600080fd5b602435600281106117d357600080fd5b5060025433146117e257600080fd5b6024356009610140516101602060e05260c052604060c0205560243561014080602001516000825180602090131561181957600080fd5b809190121561182757600080fd5b8061014051036101000a82049050905090507f22b59c94b6ec143f205f4ac5d8177280de0eab514e8d857330a1af17343e97bd60006000a3600160005260206000f350005b6380a0628b600051141561193357341561188557600080fd5b600435602051811061189657600080fd5b506402540be400600560043560e05260c052604060c02054026080518111156118be57600080fd5b610140526402540be400600454026080518111156118db57600080fd5b6101605260a0516101405161016051806118f457600080fd5b806402540be400830205905090508060805190131561191257600080fd5b809190121561192057600080fd5b610180526101805160005260206000f350005b63f2fde38b60005114156119ba57341561194c57600080fd5b600435602051811061195d57600080fd5b5060006004351861196d57600080fd5b600254331461197b57600080fd5b6004356002556004356002547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060006000a3600160005260206000f350005b63993f4a206000511415611bbb5734156119d357600080fd5b60406004356004016101403760206004356004013511156119f357600080fd5b6002543314611a0157600080fd5b600066038d7ea4c680006101a05260a0516101a0516024358181028115838383051417611a2d57600080fd5b6402540be400810590509050905080608051901315611a4b57600080fd5b8091901215611a5957600080fd5b1215611ac8576402540be4006402540be3ff66038d7ea4c680006101a05260a0516101a0516024358181028115838383051417611a9557600080fd5b6402540be400810590509050905080608051901315611ab357600080fd5b8091901215611ac157600080fd5b0305611b26565b6402540be40066038d7ea4c680006101a05260a0516101a0516024358181028115838383051417611af857600080fd5b6402540be400810590509050905080608051901315611b1657600080fd5b8091901215611b2457600080fd5b055b6000811215611b3457600080fd5b600a610140516101602060e05260c052604060c02055602435610140806020015160008251806020901315611b6857600080fd5b8091901215611b7657600080fd5b8061014051036101000a82049050905090507fd8dd23b660d1a2cd022ce86c6122d03c591f721b3c2af378ecb404c0b605ddc760006000a3600160005260206000f350005b63e005cbbf6000511415611c7c573415611bd457600080fd5b6040600435600401610140376020600435600401351115611bf457600080fd5b6402540be400600a610140516101602060e05260c052604060c0205402608051811115611c2057600080fd5b6101a05266038d7ea4c680006101c05260a0516101a0516101c05180611c4557600080fd5b806402540be4008302059050905080608051901315611c6357600080fd5b8091901215611c7157600080fd5b60005260206000f350005b6386d1e02b6000511415611cf1573415611c9557600080fd5b6004356020518110611ca657600080fd5b506002543314611cb557600080fd5b600435600b556004357f12ad2958c2383ce31dd51da097e673d81de88c202731500406f3afc70a8cf17060006000a2600160005260206000f350005b63a9059cbb6000511415611dae573415611d0a57600080fd5b6004356020518110611d1b57600080fd5b5060053360e05260c052604060c02060243581541015611d3a57600080fd5b602435815403815550600560043560e05260c052604060c02080546024358254011015611d6657600080fd5b60243581540181555060243561014052600435337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020610140a3600160005260206000f350005b6323b872dd6000511415611eb6573415611dc757600080fd5b6004356020518110611dd857600080fd5b506024356020518110611dea57600080fd5b50600560043560e05260c052604060c02060443581541015611e0b57600080fd5b604435815403815550600560243560e05260c052604060c02080546044358254011015611e3757600080fd5b604435815401815550600660043560e05260c052604060c0203360e05260c052604060c02060443581541015611e6c57600080fd5b604435815403815550604435610140526024356004357fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020610140a3600160005260206000f350005b63095ea7b36000511415611f3e573415611ecf57600080fd5b6004356020518110611ee057600080fd5b5060243560063360e05260c052604060c02060043560e05260c052604060c020556024356101405233337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256020610140a3600160005260206000f350005b6306fdde036000511415612022573415611f5757600080fd5b60008060c052602060c020610180602082540161012060006002818352015b82610120516020021115611f8957611fab565b61012051850154610120516020028501525b8151600101808352811415611f76575b5050505050506101805160206001820306601f82010390506101e0610180516020818352015b826101e0511115611fe157611ffd565b60006101e0516101a001535b8151600101808352811415611fd1575b5050506020610160526040610180510160206001820306601f8201039050610160f350005b6395d89b41600051141561210657341561203b57600080fd5b60018060c052602060c020610180602082540161012060006002818352015b8261012051602002111561206d5761208f565b61012051850154610120516020028501525b815160010180835281141561205a575b5050505050506101805160206001820306601f82010390506101e0610180516006818352015b826101e05111156120c5576120e1565b60006101e0516101a001535b81516001018083528114156120b5575b5050506020610160526040610180510160206001820306601f8201039050610160f350005b638da5cb5b600051141561212d57341561211f57600080fd5b60025460005260206000f350005b63313ce567600051141561215457341561214657600080fd5b60035460005260206000f350005b6318160ddd600051141561217b57341561216d57600080fd5b60045460005260206000f350005b6370a0823160005114156121c257341561219457600080fd5b60043560205181106121a557600080fd5b50600560043560e05260c052604060c0205460005260206000f350005b63dd62ed3e60005114156122295734156121db57600080fd5b60043560205181106121ec57600080fd5b5060243560205181106121fe57600080fd5b50600660043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f350005b634999eb8f600051141561227057341561224257600080fd5b600435602051811061225357600080fd5b50600760043560e05260c052604060c0205460005260206000f350005b6351ecd2fa60005114156122b757341561228957600080fd5b600435602051811061229a57600080fd5b50600860043560e05260c052604060c0205460005260206000f350005b63752708fb60005114156123115734156122d057600080fd5b60406004356004016101403760206004356004013511156122f057600080fd5b6009610140516101602060e05260c052604060c0205460005260206000f350005b632bc51c6d600051141561233857341561232a57600080fd5b600b5460005260206000f350005b60006000fd5b6103f7612735036103f76000396103f7612735036000f3000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603590000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e10000000000000000000000002b4ba323ab07da8250e896b6ff29bb96ddfe55a9

Deployed Bytecode

0x600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052600015610114575b6101605261014052600b543b6100b057600080fd5b600b5430186100be57600080fd5b6020610220602463f1bb10866101a052610140516101c0526101bc600b545afa6100e757600080fd5b60005061022051610180526000610180511161010257600080fd5b61018051600052600051610160515650005b6355776b77600051141561041e5762ffffff541561013157600080fd5b600162ffffff55341561014357600080fd5b600435602051811061015457600080fd5b50600760043560e05260c052604060c0205461016f57600080fd5b60006024351142604435111661018457600080fd5b60096016610140527f6c6971756964697479416464696e67416c6c6f77656400000000000000000000610160526101405150610140516101602060e05260c052604060c020546101d357600080fd5b6101405161016051610180516101a0516384ba3f696101e05260043561020052610200516006580161009b565b610260526101a052610180526101605261014052610260516101a0526305f5e10061022a57600080fd5b6305f5e1006101a0511515610240576000610263565b6024356101a0516024356101a05102041461025a57600080fd5b6024356101a051025b04610280526000600454111561030e57600b543b61028057600080fd5b600b54301861028e57600080fd5b6020610320602463fa75d1606102a052306102c0526102bc600b545afa6102b457600080fd5b6000506103205161034052610340516102cc57600080fd5b610340516102805115156102e1576000610304565b60045461028051600454610280510204146102fb57600080fd5b60045461028051025b0461028052610323565b633b9aca0061028051101561032257600080fd5b5b60053360e05260c052604060c020805461028051825401101561034557600080fd5b610280518154018155506004805461028051825401101561036557600080fd5b610280518154018155506004353b61037c57600080fd5b600435301861038a57600080fd5b602061044060646323b872dd61038052336103a052306103c0526024356103e05261039c60006004355af16103be57600080fd5b6000506104405161036052610360516103d657600080fd5b61028051337fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb31208860006000a361028051600052600062ffffff5560206000f350600062ffffff55005b6393ca2f8a6000511415610a715762ffffff541561043b57600080fd5b600162ffffff55341561044d57600080fd5b600435602051811061045e57600080fd5b50600860043560e05260c052604060c0205461047957600080fd5b42606435116000602435111661048e57600080fd5b60243560053360e05260c052604060c0205410156104ab57600080fd5b6000600454116104ba57600080fd5b610140516384ba3f69610180526004356101a0526101a0516006580161009b565b61020052610140526102005161014052600b543b6104f857600080fd5b600b54301861050657600080fd5b60206102c0602463fa75d16061024052306102605261025c600b545afa61052c57600080fd5b6000506102c0516102205260045461054357600080fd5b6004546024351515610556576000610579565b610220516024356102205160243502041461057057600080fd5b61022051602435025b046102e0526000610300526002543318156108c757620186a061059b57600080fd5b620186a060243515156105af576000610698565b600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054602435600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c0205460243502041461064d57600080fd5b600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054602435025b0461030052600a6008610400527f7472616465466565000000000000000000000000000000000000000000000000610420526104005150610400516104202060e05260c052604060c02054600a60086103a0527f6f776e65724665650000000000000000000000000000000000000000000000006103c0526103a051506103a0516103c02060e05260c052604060c02054620186a0101561073857600080fd5b600a60086103a0527f6f776e65724665650000000000000000000000000000000000000000000000006103c0526103a051506103a0516103c02060e05260c052604060c02054620186a003101561078e57600080fd5b600a6008610400527f7472616465466565000000000000000000000000000000000000000000000000610420526104005150610400516104202060e05260c052604060c02054600a60086103a0527f6f776e65724665650000000000000000000000000000000000000000000000006103c0526103a051506103a0516103c02060e05260c052604060c02054620186a0101561082957600080fd5b600a60086103a0527f6f776e65724665650000000000000000000000000000000000000000000000006103c0526103a051506103a0516103c02060e05260c052604060c02054620186a0030361038052620186a061088657600080fd5b620186a06102e051151561089b5760006108c1565b610380516102e051610380516102e0510204146108b757600080fd5b610380516102e051025b046102e0525b610140516108d457600080fd5b610140516102e05115156108e9576000610912565b6305f5e1006102e0516305f5e1006102e05102041461090757600080fd5b6305f5e1006102e051025b046102e05260053360e05260c052604060c0206024358154101561093557600080fd5b602435815403815550600560025460e05260c052604060c020805461030051825401101561096257600080fd5b61030051815401815550600461030051602435101561098057600080fd5b61030051602435038154101561099557600080fd5b6103005160243510156109a757600080fd5b61030051602435038154038155506044356102e05110156109c757600080fd5b6004353b6109d457600080fd5b60043530186109e257600080fd5b6020610520604463a9059cbb61048052336104a0526102e0516104c05261049c60006004355af1610a1257600080fd5b600050610520516104605261046051610a2a57600080fd5b602435337fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf984017171960006000a36102e051600052600062ffffff5560206000f350600062ffffff55005b6391b26ae06000511415610ece573415610a8a57600080fd5b6004356020518110610a9b57600080fd5b506024356020518110610aad57600080fd5b50610140516384ba3f69610180526004356101a0526101a0516006580161009b565b610200526101405261020051610140526101405161016051610180516101a0516101c0516101e05161020051610220516384ba3f696102605260243561028052610280516006580161009b565b6102e05261022052610200526101e0526101c0526101a0526101805261016052610140526102e05161022052600a6008610380527f74726164654665650000000000000000000000000000000000000000000000006103a0526103805150610380516103a02060e05260c052604060c02054600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054620186a01015610be357600080fd5b600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054620186a0031015610c3957600080fd5b600a6008610380527f74726164654665650000000000000000000000000000000000000000000000006103a0526103805150610380516103a02060e05260c052604060c02054600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054620186a01015610cd457600080fd5b600a6008610320527f6f776e6572466565000000000000000000000000000000000000000000000000610340526103205150610320516103402060e05260c052604060c02054620186a003036103005261022051610d3157600080fd5b61022051620186a0610d4257600080fd5b620186a069021e19e0c9bab24000001515610d5e576000610d99565b6101405169021e19e0c9bab24000006101405169021e19e0c9bab2400000020414610d8857600080fd5b6101405169021e19e0c9bab2400000025b1515610da6576000610eb9565b6103005169021e19e0c9bab24000001515610dc2576000610dfd565b6101405169021e19e0c9bab24000006101405169021e19e0c9bab2400000020414610dec57600080fd5b6101405169021e19e0c9bab2400000025b6103005169021e19e0c9bab24000001515610e19576000610e54565b6101405169021e19e0c9bab24000006101405169021e19e0c9bab2400000020414610e4357600080fd5b6101405169021e19e0c9bab2400000025b020414610e6057600080fd5b6103005169021e19e0c9bab24000001515610e7c576000610eb7565b6101405169021e19e0c9bab24000006101405169021e19e0c9bab2400000020414610ea657600080fd5b6101405169021e19e0c9bab2400000025b025b04046103e0526103e05160005260206000f350005b63126603b56000511415610fa8573415610ee757600080fd5b6024356020518110610ef857600080fd5b506044356020518110610f0a57600080fd5b5069021e19e0c9bab2400000610f1f57600080fd5b69021e19e0c9bab2400000602061020060446391b26ae061016052602435610180526044356101a05261017c6000305af1610f5957600080fd5b61020051610220526004351515610f71576000610f94565b6102205160043561022051600435020414610f8b57600080fd5b61022051600435025b04610140526101405160005260206000f350005b6343d91bf160005114156115d65762ffffff5415610fc557600080fd5b600162ffffff553415610fd757600080fd5b6004356020518110610fe857600080fd5b506024356020518110610ffa57600080fd5b50600860243560e05260c052604060c02054600760043560e05260c052604060c020541661102757600080fd5b6000606435116000604435111661103d57600080fd5b426084351161104b57600080fd5b6009600e610140527f74726164696e67416c6c6f776564000000000000000000000000000000000000610160526101405150610140516101602060e05260c052604060c0205461109a57600080fd5b6101405161016051610180516101a0516384ba3f696101e05260043561020052610200516006580161009b565b610260526101a052610180526101605261014052610260516101a05260443515156110f3576000611116565b6101a0516044356101a05160443502041461110d57600080fd5b6101a051604435025b610280526305f5e10061112857600080fd5b6305f5e100620186a061113a57600080fd5b620186a061028051151561114f57600061123b565b600a60086102c0527f74726164654665650000000000000000000000000000000000000000000000006102e0526102c051506102c0516102e02060e05260c052604060c0205461028051600a60086102c0527f74726164654665650000000000000000000000000000000000000000000000006102e0526102c051506102c0516102e02060e05260c052604060c02054610280510204146111ef57600080fd5b600a60086102c0527f74726164654665650000000000000000000000000000000000000000000000006102e0526102c051506102c0516102e02060e05260c052604060c0205461028051025b04046102a0526305f5e10061124f57600080fd5b6305f5e100620186a061126157600080fd5b620186a0610280511515611276576000611362565b600a6008610340527f6f776e6572466565000000000000000000000000000000000000000000000000610360526103405150610340516103602060e05260c052604060c0205461028051600a6008610340527f6f776e6572466565000000000000000000000000000000000000000000000000610360526103405150610340516103602060e05260c052604060c020546102805102041461131657600080fd5b600a6008610340527f6f776e6572466565000000000000000000000000000000000000000000000000610360526103405150610340516103602060e05260c052604060c0205461028051025b040461032052600b543b61137557600080fd5b600b54301861138357600080fd5b6020610440602463fa75d1606103c052306103e0526103dc600b545afa6113a957600080fd5b6000506104405161046052610460516102a051610460510110156113cc57600080fd5b6102a05161046051016103a0526103a0516113e657600080fd5b6103a05160045415156113fa57600061141d565b610320516004546103205160045402041461141457600080fd5b61032051600454025b04610480526020610580606463126603b56104c0526044356104e05260043561050052602435610520526104dc6000305af161145857600080fd5b610580516104a0526064356104a051101561147257600080fd5b600560025460e05260c052604060c020805461048051825401101561149657600080fd5b61048051815401815550600480546104805182540110156114b657600080fd5b610480518154018155506004353b6114cd57600080fd5b60043530186114db57600080fd5b602061068060646323b872dd6105c052336105e0523061060052604435610620526105dc60006004355af161150f57600080fd5b600050610680516105a0526105a05161152757600080fd5b6024353b61153457600080fd5b602435301861154257600080fd5b6020610760604463a9059cbb6106c052336106e0526104a051610700526106dc60006024355af161157257600080fd5b600050610760516106a0526106a05161158a57600080fd5b6044356024356004357f0d49f50d6dd629f4e4070731edb0abd680823ab1cbd43d89590522da4b5b32e760006000a46104a051600052600062ffffff5560206000f350600062ffffff55005b6323d7d1a860005114156116b05734156115ef57600080fd5b600435602051811061160057600080fd5b506024356002811061161157600080fd5b50600254331461162057600080fd5b602435600760043560e05260c052604060c02054141561163f57600080fd5b60026004353b61164e57600080fd5b600435301861165c57600080fd5b60206101a0600463313ce5676101405261015c6004355afa61167d57600080fd5b6000506101a051101561168f57600080fd5b602435600760043560e05260c052604060c02055600160005260206000f350005b6344dbd334600051141561178a5734156116c957600080fd5b60043560205181106116da57600080fd5b50602435600281106116eb57600080fd5b5060025433146116fa57600080fd5b602435600860043560e05260c052604060c02054141561171957600080fd5b60026004353b61172857600080fd5b600435301861173657600080fd5b60206101a0600463313ce5676101405261015c6004355afa61175757600080fd5b6000506101a051101561176957600080fd5b602435600860043560e05260c052604060c02055600160005260206000f350005b63903a1001600051141561186c5734156117a357600080fd5b60406004356004016101403760206004356004013511156117c357600080fd5b602435600281106117d357600080fd5b5060025433146117e257600080fd5b6024356009610140516101602060e05260c052604060c0205560243561014080602001516000825180602090131561181957600080fd5b809190121561182757600080fd5b8061014051036101000a82049050905090507f22b59c94b6ec143f205f4ac5d8177280de0eab514e8d857330a1af17343e97bd60006000a3600160005260206000f350005b6380a0628b600051141561193357341561188557600080fd5b600435602051811061189657600080fd5b506402540be400600560043560e05260c052604060c02054026080518111156118be57600080fd5b610140526402540be400600454026080518111156118db57600080fd5b6101605260a0516101405161016051806118f457600080fd5b806402540be400830205905090508060805190131561191257600080fd5b809190121561192057600080fd5b610180526101805160005260206000f350005b63f2fde38b60005114156119ba57341561194c57600080fd5b600435602051811061195d57600080fd5b5060006004351861196d57600080fd5b600254331461197b57600080fd5b6004356002556004356002547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060006000a3600160005260206000f350005b63993f4a206000511415611bbb5734156119d357600080fd5b60406004356004016101403760206004356004013511156119f357600080fd5b6002543314611a0157600080fd5b600066038d7ea4c680006101a05260a0516101a0516024358181028115838383051417611a2d57600080fd5b6402540be400810590509050905080608051901315611a4b57600080fd5b8091901215611a5957600080fd5b1215611ac8576402540be4006402540be3ff66038d7ea4c680006101a05260a0516101a0516024358181028115838383051417611a9557600080fd5b6402540be400810590509050905080608051901315611ab357600080fd5b8091901215611ac157600080fd5b0305611b26565b6402540be40066038d7ea4c680006101a05260a0516101a0516024358181028115838383051417611af857600080fd5b6402540be400810590509050905080608051901315611b1657600080fd5b8091901215611b2457600080fd5b055b6000811215611b3457600080fd5b600a610140516101602060e05260c052604060c02055602435610140806020015160008251806020901315611b6857600080fd5b8091901215611b7657600080fd5b8061014051036101000a82049050905090507fd8dd23b660d1a2cd022ce86c6122d03c591f721b3c2af378ecb404c0b605ddc760006000a3600160005260206000f350005b63e005cbbf6000511415611c7c573415611bd457600080fd5b6040600435600401610140376020600435600401351115611bf457600080fd5b6402540be400600a610140516101602060e05260c052604060c0205402608051811115611c2057600080fd5b6101a05266038d7ea4c680006101c05260a0516101a0516101c05180611c4557600080fd5b806402540be4008302059050905080608051901315611c6357600080fd5b8091901215611c7157600080fd5b60005260206000f350005b6386d1e02b6000511415611cf1573415611c9557600080fd5b6004356020518110611ca657600080fd5b506002543314611cb557600080fd5b600435600b556004357f12ad2958c2383ce31dd51da097e673d81de88c202731500406f3afc70a8cf17060006000a2600160005260206000f350005b63a9059cbb6000511415611dae573415611d0a57600080fd5b6004356020518110611d1b57600080fd5b5060053360e05260c052604060c02060243581541015611d3a57600080fd5b602435815403815550600560043560e05260c052604060c02080546024358254011015611d6657600080fd5b60243581540181555060243561014052600435337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020610140a3600160005260206000f350005b6323b872dd6000511415611eb6573415611dc757600080fd5b6004356020518110611dd857600080fd5b506024356020518110611dea57600080fd5b50600560043560e05260c052604060c02060443581541015611e0b57600080fd5b604435815403815550600560243560e05260c052604060c02080546044358254011015611e3757600080fd5b604435815401815550600660043560e05260c052604060c0203360e05260c052604060c02060443581541015611e6c57600080fd5b604435815403815550604435610140526024356004357fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020610140a3600160005260206000f350005b63095ea7b36000511415611f3e573415611ecf57600080fd5b6004356020518110611ee057600080fd5b5060243560063360e05260c052604060c02060043560e05260c052604060c020556024356101405233337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256020610140a3600160005260206000f350005b6306fdde036000511415612022573415611f5757600080fd5b60008060c052602060c020610180602082540161012060006002818352015b82610120516020021115611f8957611fab565b61012051850154610120516020028501525b8151600101808352811415611f76575b5050505050506101805160206001820306601f82010390506101e0610180516020818352015b826101e0511115611fe157611ffd565b60006101e0516101a001535b8151600101808352811415611fd1575b5050506020610160526040610180510160206001820306601f8201039050610160f350005b6395d89b41600051141561210657341561203b57600080fd5b60018060c052602060c020610180602082540161012060006002818352015b8261012051602002111561206d5761208f565b61012051850154610120516020028501525b815160010180835281141561205a575b5050505050506101805160206001820306601f82010390506101e0610180516006818352015b826101e05111156120c5576120e1565b60006101e0516101a001535b81516001018083528114156120b5575b5050506020610160526040610180510160206001820306601f8201039050610160f350005b638da5cb5b600051141561212d57341561211f57600080fd5b60025460005260206000f350005b63313ce567600051141561215457341561214657600080fd5b60035460005260206000f350005b6318160ddd600051141561217b57341561216d57600080fd5b60045460005260206000f350005b6370a0823160005114156121c257341561219457600080fd5b60043560205181106121a557600080fd5b50600560043560e05260c052604060c0205460005260206000f350005b63dd62ed3e60005114156122295734156121db57600080fd5b60043560205181106121ec57600080fd5b5060243560205181106121fe57600080fd5b50600660043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f350005b634999eb8f600051141561227057341561224257600080fd5b600435602051811061225357600080fd5b50600760043560e05260c052604060c0205460005260206000f350005b6351ecd2fa60005114156122b757341561228957600080fd5b600435602051811061229a57600080fd5b50600860043560e05260c052604060c0205460005260206000f350005b63752708fb60005114156123115734156122d057600080fd5b60406004356004016101403760206004356004013511156122f057600080fd5b6009610140516101602060e05260c052604060c0205460005260206000f350005b632bc51c6d600051141561233857341561232a57600080fd5b600b5460005260206000f350005b60006000fd

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

000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603590000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e10000000000000000000000002b4ba323ab07da8250e896b6ff29bb96ddfe55a9
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359
Arg [2] : 0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1
Arg [3] : 0000000000000000000000002b4ba323ab07da8250e896b6ff29bb96ddfe55a9


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.