Spend less on fees, more on crypto. Buy crypto easily with MoonPay Balance. 20M+ users trust MoonPay worldwide.
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
Don’t invest unless you’re prepared to lose all the money you invest.
Ready to simplify your web3 experience? Try the all-in-one web3 app trusted by millions worldwide.
No gas? No problem. MetaMask Gas Station includes gas fees directly in your quote.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Slots, Roulette, Poker & more - Proud sponsors of UFC, Everton & StakeF1 team!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
100s of games, generous bonuses, 20+ years of trusted gaming. Join CryptoWins & start winning today!
Overview
ETH Balance
Eth Value
$15,594.87 (@ $3,360.12/ETH)Token Holdings
Could not find any matches!
- ERC-20 Tokens (26)100 PKGPKG Token (PKG)$0.00@0.0016.61415716 BANDBandToken (BAND)$24.09@1.4513 STTScatter.cx (STT)$0.00@0.008.19613077 sUSDSynth sUSD (sUSD)$8.11@0.9898161.44517516 SNXSynthetix Ne... (SNX)$332.58@2.0683.61019402 UBTUniBright (UBT)$3.72@0.04455.8777503 BATBAT (BAT)$1.50@0.2558772.11739804 DAIDai Stableco... (DAI)$771.95@0.99980.08553331 MKRMaker (MKR)$130.82@1,529.4882.0389908 SAISai Stableco... (SAI)$1,556.28@18.970.13521259 TUSDTrueUSD (TUSD)$0.14@1.0031.491824 USDCUSDC (USDC)$31.49@1.000.00068001 WBTCWrapped BTC (WBTC)$65.19@95,860.00777 KTHERC-20: Kate... (KTH)32,000 MNEMinereum32,000 MNEMinereum200 PRQParsiq Token0.0308663 REPReputation$0.02@0.571677.37375986 SNXSynthetix Network Token99,999ERC20 ***7.98572467 sUSDSynth sUSD1.7 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]0.7 TokenERC-20 TOKEN*[Suspicious]1,500 TokenERC-20 TOKEN*[Suspicious]856,420,144,564 TokenERC-20 TOKEN*[Spam]NFT Tokens (13)claim rewards on apyusd.netapyusd.netERC-1155claim rewards on pooledeth.iopooledeth.ioERC-1155claim rewards on snxtoken.comsnxtoken.comERC-1155claim rewards on wrappedbtc.netwrappedbtc.netERC-1155ERC-1155 TOKEN*[Suspicious]
More Info
Private Name Tags
ContractCreator
Multichain Info
1 address found via- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
- Cards New
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 14 from a total of 14 transactions
Transaction Hash MethodBlockFromToSet Internal Inv... 9076761 2019-12-09 9:46:12 1844 days ago 1575884772 IN 0 ETH$0.00 0.00016306 5 Set Internal Inv... 9076758 2019-12-09 9:45:36 1844 days ago 1575884736 IN 0 ETH$0.00 0.00016306 5 Add Operator 9054796 2019-12-05 12:06:31 1848 days ago 1575547591 IN 0 ETH$0.00 0.0001446 2 Transfer Admin 9054696 2019-12-05 11:41:39 1848 days ago 1575546099 IN 0 ETH$0.00 0.00009109 2 Add Operator 9054696 2019-12-05 11:41:39 1848 days ago 1575546099 IN 0 ETH$0.00 0.0001446 2 Add Operator 9054695 2019-12-05 11:41:37 1848 days ago 1575546097 IN 0 ETH$0.00 0.0001446 2 Add Operator 9054695 2019-12-05 11:41:37 1848 days ago 1575546097 IN 0 ETH$0.00 0.0001446 2 Add Operator 9054695 2019-12-05 11:41:37 1848 days ago 1575546097 IN 0 ETH$0.00 0.00004839 2 Add Operator 9054533 2019-12-05 10:50:32 1848 days ago 1575543032 IN 0 ETH$0.00 0.00004839 2 Add Operator 9054533 2019-12-05 10:50:32 1848 days ago 1575543032 IN 0 ETH$0.00 0.00004839 2 Add Operator 9054533 2019-12-05 10:50:32 1848 days ago 1575543032 IN 0 ETH$0.00 0.00004839 2 Add Operator 9054533 2019-12-05 10:50:32 1848 days ago 1575543032 IN 0 ETH$0.00 0.00004839 2 Add Operator 9054533 2019-12-05 10:50:32 1848 days ago 1575543032 IN 0 ETH$0.00 0.0001746 2 Set Fee 9054533 2019-12-05 10:50:32 1848 days ago 1575543032 IN 0 ETH$0.00 0.00005682 2 Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block FromTo12623790 2021-06-13 3:41:38 1292 days ago 1623555698 0.06667863 ETH$224.05 12623790 2021-06-13 3:41:38 1292 days ago 1623555698 0.06667863 ETH$224.05 11730213 2021-01-26 8:27:40 1430 days ago 1611649660 92.45634076 ETH$310,664.18 11730213 2021-01-26 8:27:40 1430 days ago 1611649660 92.45634076 ETH$310,664.18 11729565 2021-01-26 5:53:54 1430 days ago 1611640434 7.54051666 ETH$25,337.02 11729565 2021-01-26 5:53:54 1430 days ago 1611640434 7.54051666 ETH$25,337.02 11355581 2020-11-29 19:45:37 1487 days ago 1606679137 0.19214242 ETH$645.62 11355581 2020-11-29 19:45:37 1487 days ago 1606679137 0.19214242 ETH$645.62 11269008 2020-11-16 12:55:28 1500 days ago 1605531328 0.24202072 ETH$813.22 11269008 2020-11-16 12:55:28 1500 days ago 1605531328 0.24202072 ETH$813.22 11258725 2020-11-14 22:57:32 1502 days ago 1605394652 0.24202072 ETH$813.22 11258725 2020-11-14 22:57:32 1502 days ago 1605394652 0.24202072 ETH$813.22 11258725 2020-11-14 22:57:32 1502 days ago 1605394652 0.24202072 ETH$813.22 11258725 2020-11-14 22:57:32 1502 days ago 1605394652 0.24202072 ETH$813.22 11109127 2020-10-22 23:48:27 1525 days ago 1603410507 0.14418565 ETH$484.48 11109127 2020-10-22 23:48:27 1525 days ago 1603410507 0.14418565 ETH$484.48 11069773 2020-10-16 22:51:06 1531 days ago 1602888666 0.19099897 ETH$641.78 11069773 2020-10-16 22:51:06 1531 days ago 1602888666 0.19099897 ETH$641.78 10973166 2020-10-01 23:29:16 1546 days ago 1601594956 0.24387409 ETH$819.45 10973166 2020-10-01 23:29:16 1546 days ago 1601594956 0.24387409 ETH$819.45 10972052 2020-10-01 19:17:26 1546 days ago 1601579846 0.31854203 ETH$1,070.34 10972052 2020-10-01 19:17:26 1546 days ago 1601579846 0.31854203 ETH$1,070.34 10969267 2020-10-01 9:07:45 1547 days ago 1601543265 0.26509176 ETH$890.74 10969267 2020-10-01 9:07:45 1547 days ago 1601543265 0.26509176 ETH$890.74 10968491 2020-10-01 6:10:08 1547 days ago 1601532608 0.00025 ETH$0.84 Loading...LoadingContract Name:KyberUniswapReserve
Compiler Versionv0.4.18+commit.9cf6e910
Contract Source Code (Solidity)
- interface ERC20
- - function totalSupply()
- - function balanceOf(address _owner)
- - function transfer(address _to, uint _ ...
- - function transferFrom(address _from, ...
- - function approve(address _spender, ui ...
- - function allowance(address _owner, ad ...
- - function decimals()
- contract PermissionGroups
- - function PermissionGroups()
- - function getOperators ()
- - function getAlerters ()
- - function transferAdmin(address newAdm ...
- - function transferAdminQuickly(address ...
- - function claimAdmin()
- - function addAlerter(address newAlerte ...
- - function removeAlerter (address alert ...
- - function addOperator(address newOpera ...
- - function removeOperator (address oper ...
- contract Withdrawable is Permissio ...
- - function withdrawToken(ERC20 token, u ...
- - function withdrawEther(uint amount, a ...
- interface KyberReserveInterface
- - function trade(
- - function getConversionRate(ERC20 src, ...
- contract Utils
- - function setDecimals(ERC20 token)
- - function getDecimals(ERC20 token)
- - function calcDstQty(uint srcQty, uint ...
- - function calcSrcQty(uint dstQty, uint ...
- contract Utils2 is Utils
- - function getBalance(ERC20 token, addr ...
- - function getDecimalsSafe(ERC20 token)
- - function calcDestAmount(ERC20 src, ER ...
- - function calcSrcAmount(ERC20 src, ERC ...
- - function calcRateFromQty(uint srcAmou ...
- interface UniswapExchange
- - function ethToTokenSwapInput(
- - function tokenToEthSwapInput(
- - function getEthToTokenInputPrice(
- - function getTokenToEthInputPrice(
- interface UniswapFactory
- - function getExchange(address token)
- contract KyberUniswapReserve is Ky ... *
- - function KyberUniswapReserve(
- - function()
- - function getConversionRate(
- - function applyInternalInventoryHintTo ...
- - function trade(
- - function setFee(
- - function setInternalActivationConfig(
- - function setInternalInventoryLimits(
- - function listToken(ERC20 token)
- - function delistToken(ERC20 token)
- - function isValidTokens(
- - function enableTrade()
- - function disableTrade()
- - function setKyberNetwork(
- - function shouldUseInternalInventory(
- - function calculateSpreadBps(
- - function deductFee(
- - function addPremium(
- - function calcUniswapConversion(
/** *Submitted for verification at Etherscan.io on 2019-12-05 */ // File: contracts/ERC20Interface.sol pragma solidity 0.4.18; // https://github.com/ethereum/EIPs/issues/20 interface ERC20 { function totalSupply() public view returns (uint supply); function balanceOf(address _owner) public view returns (uint balance); function transfer(address _to, uint _value) public returns (bool success); function transferFrom(address _from, address _to, uint _value) public returns (bool success); function approve(address _spender, uint _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint remaining); function decimals() public view returns(uint digits); event Approval(address indexed _owner, address indexed _spender, uint _value); } // File: contracts/PermissionGroups.sol pragma solidity 0.4.18; contract PermissionGroups { address public admin; address public pendingAdmin; mapping(address=>bool) internal operators; mapping(address=>bool) internal alerters; address[] internal operatorsGroup; address[] internal alertersGroup; uint constant internal MAX_GROUP_SIZE = 50; function PermissionGroups() public { admin = msg.sender; } modifier onlyAdmin() { require(msg.sender == admin); _; } modifier onlyOperator() { require(operators[msg.sender]); _; } modifier onlyAlerter() { require(alerters[msg.sender]); _; } function getOperators () external view returns(address[]) { return operatorsGroup; } function getAlerters () external view returns(address[]) { return alertersGroup; } event TransferAdminPending(address pendingAdmin); /** * @dev Allows the current admin to set the pendingAdmin address. * @param newAdmin The address to transfer ownership to. */ function transferAdmin(address newAdmin) public onlyAdmin { require(newAdmin != address(0)); TransferAdminPending(pendingAdmin); pendingAdmin = newAdmin; } /** * @dev Allows the current admin to set the admin in one tx. Useful initial deployment. * @param newAdmin The address to transfer ownership to. */ function transferAdminQuickly(address newAdmin) public onlyAdmin { require(newAdmin != address(0)); TransferAdminPending(newAdmin); AdminClaimed(newAdmin, admin); admin = newAdmin; } event AdminClaimed( address newAdmin, address previousAdmin); /** * @dev Allows the pendingAdmin address to finalize the change admin process. */ function claimAdmin() public { require(pendingAdmin == msg.sender); AdminClaimed(pendingAdmin, admin); admin = pendingAdmin; pendingAdmin = address(0); } event AlerterAdded (address newAlerter, bool isAdd); function addAlerter(address newAlerter) public onlyAdmin { require(!alerters[newAlerter]); // prevent duplicates. require(alertersGroup.length < MAX_GROUP_SIZE); AlerterAdded(newAlerter, true); alerters[newAlerter] = true; alertersGroup.push(newAlerter); } function removeAlerter (address alerter) public onlyAdmin { require(alerters[alerter]); alerters[alerter] = false; for (uint i = 0; i < alertersGroup.length; ++i) { if (alertersGroup[i] == alerter) { alertersGroup[i] = alertersGroup[alertersGroup.length - 1]; alertersGroup.length--; AlerterAdded(alerter, false); break; } } } event OperatorAdded(address newOperator, bool isAdd); function addOperator(address newOperator) public onlyAdmin { require(!operators[newOperator]); // prevent duplicates. require(operatorsGroup.length < MAX_GROUP_SIZE); OperatorAdded(newOperator, true); operators[newOperator] = true; operatorsGroup.push(newOperator); } function removeOperator (address operator) public onlyAdmin { require(operators[operator]); operators[operator] = false; for (uint i = 0; i < operatorsGroup.length; ++i) { if (operatorsGroup[i] == operator) { operatorsGroup[i] = operatorsGroup[operatorsGroup.length - 1]; operatorsGroup.length -= 1; OperatorAdded(operator, false); break; } } } } // File: contracts/Withdrawable.sol pragma solidity 0.4.18; /** * @title Contracts that should be able to recover tokens or ethers * @author Ilan Doron * @dev This allows to recover any tokens or Ethers received in a contract. * This will prevent any accidental loss of tokens. */ contract Withdrawable is PermissionGroups { event TokenWithdraw(ERC20 token, uint amount, address sendTo); /** * @dev Withdraw all ERC20 compatible tokens * @param token ERC20 The address of the token contract */ function withdrawToken(ERC20 token, uint amount, address sendTo) external onlyAdmin { require(token.transfer(sendTo, amount)); TokenWithdraw(token, amount, sendTo); } event EtherWithdraw(uint amount, address sendTo); /** * @dev Withdraw Ethers */ function withdrawEther(uint amount, address sendTo) external onlyAdmin { sendTo.transfer(amount); EtherWithdraw(amount, sendTo); } } // File: contracts/KyberReserveInterface.sol pragma solidity 0.4.18; /// @title Kyber Reserve contract interface KyberReserveInterface { function trade( ERC20 srcToken, uint srcAmount, ERC20 destToken, address destAddress, uint conversionRate, bool validate ) public payable returns(bool); function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint); } // File: contracts/Utils.sol pragma solidity 0.4.18; /// @title Kyber constants contract contract Utils { ERC20 constant internal ETH_TOKEN_ADDRESS = ERC20(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee); uint constant internal PRECISION = (10**18); uint constant internal MAX_QTY = (10**28); // 10B tokens uint constant internal MAX_RATE = (PRECISION * 10**6); // up to 1M tokens per ETH uint constant internal MAX_DECIMALS = 18; uint constant internal ETH_DECIMALS = 18; mapping(address=>uint) internal decimals; function setDecimals(ERC20 token) internal { if (token == ETH_TOKEN_ADDRESS) decimals[token] = ETH_DECIMALS; else decimals[token] = token.decimals(); } function getDecimals(ERC20 token) internal view returns(uint) { if (token == ETH_TOKEN_ADDRESS) return ETH_DECIMALS; // save storage access uint tokenDecimals = decimals[token]; // technically, there might be token with decimals 0 // moreover, very possible that old tokens have decimals 0 // these tokens will just have higher gas fees. if(tokenDecimals == 0) return token.decimals(); return tokenDecimals; } function calcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) { require(srcQty <= MAX_QTY); require(rate <= MAX_RATE); if (dstDecimals >= srcDecimals) { require((dstDecimals - srcDecimals) <= MAX_DECIMALS); return (srcQty * rate * (10**(dstDecimals - srcDecimals))) / PRECISION; } else { require((srcDecimals - dstDecimals) <= MAX_DECIMALS); return (srcQty * rate) / (PRECISION * (10**(srcDecimals - dstDecimals))); } } function calcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) { require(dstQty <= MAX_QTY); require(rate <= MAX_RATE); //source quantity is rounded up. to avoid dest quantity being too low. uint numerator; uint denominator; if (srcDecimals >= dstDecimals) { require((srcDecimals - dstDecimals) <= MAX_DECIMALS); numerator = (PRECISION * dstQty * (10**(srcDecimals - dstDecimals))); denominator = rate; } else { require((dstDecimals - srcDecimals) <= MAX_DECIMALS); numerator = (PRECISION * dstQty); denominator = (rate * (10**(dstDecimals - srcDecimals))); } return (numerator + denominator - 1) / denominator; //avoid rounding down errors } } // File: contracts/Utils2.sol pragma solidity 0.4.18; contract Utils2 is Utils { /// @dev get the balance of a user. /// @param token The token type /// @return The balance function getBalance(ERC20 token, address user) public view returns(uint) { if (token == ETH_TOKEN_ADDRESS) return user.balance; else return token.balanceOf(user); } function getDecimalsSafe(ERC20 token) internal returns(uint) { if (decimals[token] == 0) { setDecimals(token); } return decimals[token]; } function calcDestAmount(ERC20 src, ERC20 dest, uint srcAmount, uint rate) internal view returns(uint) { return calcDstQty(srcAmount, getDecimals(src), getDecimals(dest), rate); } function calcSrcAmount(ERC20 src, ERC20 dest, uint destAmount, uint rate) internal view returns(uint) { return calcSrcQty(destAmount, getDecimals(src), getDecimals(dest), rate); } function calcRateFromQty(uint srcAmount, uint destAmount, uint srcDecimals, uint dstDecimals) internal pure returns(uint) { require(srcAmount <= MAX_QTY); require(destAmount <= MAX_QTY); if (dstDecimals >= srcDecimals) { require((dstDecimals - srcDecimals) <= MAX_DECIMALS); return (destAmount * PRECISION / ((10 ** (dstDecimals - srcDecimals)) * srcAmount)); } else { require((srcDecimals - dstDecimals) <= MAX_DECIMALS); return (destAmount * PRECISION * (10 ** (srcDecimals - dstDecimals)) / srcAmount); } } } // File: contracts/reserves/bridgeReserves/uniswap/KyberUniswapReserve.sol pragma solidity 0.4.18; interface UniswapExchange { function ethToTokenSwapInput( uint256 min_tokens, uint256 deadline ) external payable returns (uint256 tokens_bought); function tokenToEthSwapInput( uint256 tokens_sold, uint256 min_eth, uint256 deadline ) external returns (uint256 eth_bought); function getEthToTokenInputPrice( uint256 eth_sold ) external view returns (uint256 tokens_bought); function getTokenToEthInputPrice( uint256 tokens_sold ) external view returns (uint256 eth_bought); } interface UniswapFactory { function getExchange(address token) external view returns (address exchange); } /* * A reserve that connects to Uniswap. * * This reserve makes use of an internal inventory for locally filling orders * using the reserve's inventory when certain conditions are met. * Conditions are: * - After trading the inventory will remain within defined limits. * - Uniswap prices do not display internal arbitrage. * - Uniswap ask and bid prices meet minimum spread requirements. * * An additional premium may be added to the converted price for optional * promotions. */ contract KyberUniswapReserve is KyberReserveInterface, Withdrawable, Utils2 { // Parts per 10000 uint public constant DEFAULT_FEE_BPS = 25; UniswapFactory public uniswapFactory; address public kyberNetwork; uint public feeBps = DEFAULT_FEE_BPS; // Uniswap exchange contract for every listed token // token -> exchange mapping (address => address) public tokenExchange; // Internal inventory balance limits // token -> limit mapping (address => uint) public internalInventoryMin; mapping (address => uint) public internalInventoryMax; // Minimum spread in BPS required for using internal inventory // token -> limit mapping (address => uint) public internalActivationMinSpreadBps; // Premium BPS added to internal price (making it better). // token -> limit mapping (address => uint) public internalPricePremiumBps; bool public tradeEnabled = true; /** Constructor */ function KyberUniswapReserve( UniswapFactory _uniswapFactory, address _admin, address _kyberNetwork ) public { require(address(_uniswapFactory) != 0); require(_admin != 0); require(_kyberNetwork != 0); uniswapFactory = _uniswapFactory; admin = _admin; kyberNetwork = _kyberNetwork; } function() public payable { // anyone can deposit ether } /** Returns dest quantity / source quantity. Last bit of the rate indicates whether to use internal inventory: 0 - use uniswap 1 - use internal inventory */ function getConversionRate( ERC20 src, ERC20 dest, uint srcQty, uint blockNumber ) public view returns(uint) { // This makes the UNUSED warning go away. blockNumber; if (!isValidTokens(src, dest)) return 0; if (!tradeEnabled) return 0; if (srcQty == 0) return 0; ERC20 token; if (src == ETH_TOKEN_ADDRESS) { token = dest; } else if (dest == ETH_TOKEN_ADDRESS) { token = src; } else { // Should never arrive here - isValidTokens requires one side to be ETH revert(); } uint convertedQuantity; uint rateSrcDest; uint rateDestSrc; (convertedQuantity, rateSrcDest) = calcUniswapConversion(src, dest, srcQty); if (convertedQuantity == 0) return 0; (, rateDestSrc) = calcUniswapConversion(dest, src, convertedQuantity); uint quantityWithPremium = addPremium(token, convertedQuantity); bool useInternalInventory = shouldUseInternalInventory( src, /* srcToken */ srcQty, /* srcAmount */ dest, /* destToken */ quantityWithPremium, /* destAmount */ rateSrcDest, /* rateSrcDest */ rateDestSrc /* rateDestSrc */ ); uint rate; if (useInternalInventory) { // If using internal inventory add premium to converted quantity rate = calcRateFromQty( srcQty, /* srcAmount */ quantityWithPremium, /* destAmount */ getDecimals(src), /* srcDecimals */ getDecimals(dest) /* dstDecimals */ ); } else { // Use rate calculated from uniswap quantities after fees rate = rateSrcDest; } return applyInternalInventoryHintToRate(rate, useInternalInventory); } function applyInternalInventoryHintToRate( uint rate, bool useInternalInventory ) internal pure returns(uint) { return rate % 2 == (useInternalInventory ? 1 : 0) ? rate : rate - 1; } event TradeExecute( address indexed sender, address src, uint srcAmount, address destToken, uint destAmount, address destAddress, bool useInternalInventory ); /** conversionRate: expected conversion rate should be >= this value. */ function trade( ERC20 srcToken, uint srcAmount, ERC20 destToken, address destAddress, uint conversionRate, bool validate ) public payable returns(bool) { require(tradeEnabled); require(msg.sender == kyberNetwork); require(isValidTokens(srcToken, destToken)); if (validate) { require(conversionRate > 0); if (srcToken == ETH_TOKEN_ADDRESS) require(msg.value == srcAmount); else require(msg.value == 0); } // Making sure srcAmount has been transfered to the reserve. // If srcToken is ETH the value has already been transfered by calling // the function. if (srcToken != ETH_TOKEN_ADDRESS) require(srcToken.transferFrom(msg.sender, address(this), srcAmount)); uint expectedDestAmount = calcDestAmount( srcToken, /* src */ destToken, /* dest */ srcAmount, /* srcAmount */ conversionRate /* rate */ ); bool useInternalInventory = conversionRate % 2 == 1; uint destAmount; UniswapExchange exchange; if (srcToken == ETH_TOKEN_ADDRESS) { if (!useInternalInventory) { // Deduct fees (in ETH) before converting uint quantity = deductFee(srcAmount); exchange = UniswapExchange(tokenExchange[address(destToken)]); destAmount = exchange.ethToTokenSwapInput.value(quantity)( 1, /* min_tokens: uniswap requires it to be > 0 */ 2 ** 255 /* deadline */ ); require(destAmount >= expectedDestAmount); } // Transfer user-expected dest amount require(destToken.transfer(destAddress, expectedDestAmount)); } else { if (!useInternalInventory) { exchange = UniswapExchange(tokenExchange[address(srcToken)]); destAmount = exchange.tokenToEthSwapInput( srcAmount, 1, /* min_eth: uniswap requires it to be > 0 */ 2 ** 255 /* deadline */ ); // Deduct fees (in ETH) after converting destAmount = deductFee(destAmount); require(destAmount >= expectedDestAmount); } // Transfer user-expected dest amount destAddress.transfer(expectedDestAmount); } TradeExecute( msg.sender, /* sender */ srcToken, /* src */ srcAmount, /* srcAmount */ destToken, /* destToken */ expectedDestAmount, /* destAmount */ destAddress, /* destAddress */ useInternalInventory /* useInternalInventory */ ); return true; } event FeeUpdated( uint bps ); function setFee( uint bps ) public onlyAdmin { require(bps <= 10000); feeBps = bps; FeeUpdated(bps); } event InternalActivationConfigUpdated( ERC20 token, uint minSpreadBps, uint premiumBps ); function setInternalActivationConfig( ERC20 token, uint minSpreadBps, uint premiumBps ) public onlyAdmin { require(tokenExchange[address(token)] != address(0)); require(minSpreadBps <= 1000); // min spread <= 10% require(premiumBps <= 500); // premium <= 5% internalActivationMinSpreadBps[address(token)] = minSpreadBps; internalPricePremiumBps[address(token)] = premiumBps; InternalActivationConfigUpdated(token, minSpreadBps, premiumBps); } event InternalInventoryLimitsUpdated( ERC20 token, uint minBalance, uint maxBalance ); function setInternalInventoryLimits( ERC20 token, uint minBalance, uint maxBalance ) public onlyOperator { require(tokenExchange[address(token)] != address(0)); internalInventoryMin[address(token)] = minBalance; internalInventoryMax[address(token)] = maxBalance; InternalInventoryLimitsUpdated(token, minBalance, maxBalance); } event TokenListed( ERC20 token, UniswapExchange exchange ); function listToken(ERC20 token) public onlyAdmin { require(address(token) != 0); UniswapExchange uniswapExchange = UniswapExchange( uniswapFactory.getExchange(token) ); tokenExchange[address(token)] = address(uniswapExchange); setDecimals(token); require(token.approve(uniswapExchange, 2 ** 255)); // internal inventory disabled by default internalInventoryMin[address(token)] = 2 ** 255; internalInventoryMax[address(token)] = 0; internalActivationMinSpreadBps[address(token)] = 0; internalPricePremiumBps[address(token)] = 0; TokenListed(token, uniswapExchange); } event TokenDelisted(ERC20 token); function delistToken(ERC20 token) public onlyAdmin { require(tokenExchange[address(token)] != address(0)); delete tokenExchange[address(token)]; delete internalInventoryMin[address(token)]; delete internalInventoryMax[address(token)]; delete internalActivationMinSpreadBps[address(token)]; delete internalPricePremiumBps[address(token)]; TokenDelisted(token); } function isValidTokens( ERC20 src, ERC20 dest ) public view returns(bool) { return ( ( src == ETH_TOKEN_ADDRESS && tokenExchange[address(dest)] != address(0) ) || ( tokenExchange[address(src)] != address(0) && dest == ETH_TOKEN_ADDRESS ) ); } event TradeEnabled( bool enable ); function enableTrade() public onlyAdmin returns(bool) { tradeEnabled = true; TradeEnabled(true); return true; } function disableTrade() public onlyAlerter returns(bool) { tradeEnabled = false; TradeEnabled(false); return true; } event KyberNetworkSet( address kyberNetwork ); function setKyberNetwork( address _kyberNetwork ) public onlyAdmin { require(_kyberNetwork != 0); kyberNetwork = _kyberNetwork; KyberNetworkSet(kyberNetwork); } /* * Uses amounts and rates to check if the reserve's internal inventory can * be used directly. * * rateEthToToken and rateTokenToEth are in kyber rate format meaning * rate as numerator and 1e18 as denominator. */ function shouldUseInternalInventory( ERC20 srcToken, uint srcAmount, ERC20 destToken, uint destAmount, uint rateSrcDest, uint rateDestSrc ) public view returns(bool) { require(srcAmount < MAX_QTY); require(destAmount < MAX_QTY); // Check for internal inventory balance limitations ERC20 token; if (srcToken == ETH_TOKEN_ADDRESS) { token = destToken; uint tokenBalance = token.balanceOf(this); if ( tokenBalance < destAmount || tokenBalance - destAmount < internalInventoryMin[token] ) { return false; } } else { token = srcToken; if (this.balance < destAmount) return false; if (token.balanceOf(this) + srcAmount > internalInventoryMax[token]) { return false; } } uint normalizedDestSrc = 10 ** 36 / rateDestSrc; // Check for arbitrage if (rateSrcDest > normalizedDestSrc) return false; uint activationSpread = internalActivationMinSpreadBps[token]; uint spread = uint(calculateSpreadBps(normalizedDestSrc, rateSrcDest)); return spread >= activationSpread; } /* * Spread calculation is (ask - bid) / ((ask + bid) / 2). * We multiply by 10000 to get result in BPS. * * Note: if askRate > bidRate result will be negative indicating * internal arbitrage. */ function calculateSpreadBps( uint _askRate, uint _bidRate ) public pure returns(int) { int askRate = int(_askRate); int bidRate = int(_bidRate); return 10000 * 2 * (askRate - bidRate) / (askRate + bidRate); } function deductFee( uint amount ) public view returns(uint) { return amount * (10000 - feeBps) / 10000; } function addPremium( ERC20 token, uint amount ) public view returns(uint) { require(amount <= MAX_QTY); return amount * (10000 + internalPricePremiumBps[token]) / 10000; } function calcUniswapConversion( ERC20 src, ERC20 dest, uint srcQty ) internal view returns(uint destQty, uint rate) { UniswapExchange exchange; if (src == ETH_TOKEN_ADDRESS) { exchange = UniswapExchange(tokenExchange[address(dest)]); uint amountLessFee = deductFee(srcQty); if (amountLessFee == 0) return (0, 0); destQty = exchange.getEthToTokenInputPrice( amountLessFee ); } else { exchange = UniswapExchange(tokenExchange[address(src)]); destQty = deductFee( exchange.getTokenToEthInputPrice(srcQty) ); } rate = calcRateFromQty( srcQty, /* srcAmount */ destQty, /* destAmount */ getDecimals(src), /* srcDecimals */ getDecimals(dest) /* dstDecimals */ ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"constant":false,"inputs":[],"name":"enableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenExchange","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"internalPricePremiumBps","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"listToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeBps","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DEFAULT_FEE_BPS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"addPremium","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"internalInventoryMin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_kyberNetwork","type":"address"}],"name":"setKyberNetwork","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"srcToken","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"destToken","type":"address"},{"name":"destAmount","type":"uint256"},{"name":"rateSrcDest","type":"uint256"},{"name":"rateDestSrc","type":"uint256"}],"name":"shouldUseInternalInventory","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bps","type":"uint256"}],"name":"setFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"srcToken","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"destToken","type":"address"},{"name":"destAddress","type":"address"},{"name":"conversionRate","type":"uint256"},{"name":"validate","type":"bool"}],"name":"trade","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"}],"name":"isValidTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"minSpreadBps","type":"uint256"},{"name":"premiumBps","type":"uint256"}],"name":"setInternalActivationConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAlerters","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"},{"name":"blockNumber","type":"uint256"}],"name":"getConversionRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"uniswapFactory","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"internalInventoryMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"minBalance","type":"uint256"},{"name":"maxBalance","type":"uint256"}],"name":"setInternalInventoryLimits","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"amount","type":"uint256"}],"name":"deductFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"delistToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetwork","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_askRate","type":"uint256"},{"name":"_bidRate","type":"uint256"}],"name":"calculateSpreadBps","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"internalActivationMinSpreadBps","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradeEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_uniswapFactory","type":"address"},{"name":"_admin","type":"address"},{"name":"_kyberNetwork","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"srcAmount","type":"uint256"},{"indexed":false,"name":"destToken","type":"address"},{"indexed":false,"name":"destAmount","type":"uint256"},{"indexed":false,"name":"destAddress","type":"address"},{"indexed":false,"name":"useInternalInventory","type":"bool"}],"name":"TradeExecute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bps","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"minSpreadBps","type":"uint256"},{"indexed":false,"name":"premiumBps","type":"uint256"}],"name":"InternalActivationConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"minBalance","type":"uint256"},{"indexed":false,"name":"maxBalance","type":"uint256"}],"name":"InternalInventoryLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"exchange","type":"address"}],"name":"TokenListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"}],"name":"TokenDelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"enable","type":"bool"}],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"kyberNetwork","type":"address"}],"name":"KyberNetworkSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAdmin","type":"address"},{"indexed":false,"name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAlerter","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"AlerterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOperator","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"}]
Contract Creation Code
60606040526019600955600f805460ff19166001179055341561002157600080fd5b60405160608061261583398101604052808051919060200180519190602001805160008054600160a060020a03191633600160a060020a039081169190911790915590925084161515905061007557600080fd5b600160a060020a038216151561008a57600080fd5b600160a060020a038116151561009f57600080fd5b60078054600160a060020a03948516600160a060020a03199182161790915560008054938516938216939093179092556008805491909316911617905561252a806100eb6000396000f3006060604052600436106101c85763ffffffff60e060020a60003504166299d38681146101ca57806301a12fd3146101f15780630dd94b96146102105780631db950781461024b5780631fc1e25f1461027c57806324a9d8531461029b57806326782247146102ae57806327a099d8146102c157806333d8262c146103275780633a6e7d391461033a5780633ccdbb281461035c578063408ee7fe1461038557806348caa206146103a457806354a325a6146103c35780635a65d4c9146103e25780636940030f1461041457806369fe0e2d146104275780636cf698111461043d57806375829def1461046957806377f50f97146104885780637acc86781461049b5780637be98598146104ba5780637bec03aa146104df5780637c423f54146105045780637cd44272146105175780638bdb2afa146105425780639870d7fe14610555578063998614cb146105745780639b9a33ff14610593578063a9afaaaf146105b8578063abffc9ac146105ce578063ac8a584a146105ed578063b78b842d1461060c578063bc91970a1461061f578063c3e0d71214610638578063ce56c45414610657578063d4fac45d14610679578063d621e8131461069e578063f851a440146106b1575b005b34156101d557600080fd5b6101dd6106c4565b604051901515815260200160405180910390f35b34156101fc57600080fd5b6101c8600160a060020a036004351661072c565b341561021b57600080fd5b61022f600160a060020a036004351661089c565b604051600160a060020a03909116815260200160405180910390f35b341561025657600080fd5b61026a600160a060020a03600435166108b7565b60405190815260200160405180910390f35b341561028757600080fd5b6101c8600160a060020a03600435166108c9565b34156102a657600080fd5b61026a610abb565b34156102b957600080fd5b61022f610ac1565b34156102cc57600080fd5b6102d4610ad0565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156103135780820151838201526020016102fb565b505050509050019250505060405180910390f35b341561033257600080fd5b61026a610b38565b341561034557600080fd5b61026a600160a060020a0360043516602435610b3d565b341561036757600080fd5b6101c8600160a060020a036004358116906024359060443516610b82565b341561039057600080fd5b6101c8600160a060020a0360043516610c79565b34156103af57600080fd5b61026a600160a060020a0360043516610d75565b34156103ce57600080fd5b6101c8600160a060020a0360043516610d87565b34156103ed57600080fd5b6101dd600160a060020a03600435811690602435906044351660643560843560a435610e19565b341561041f57600080fd5b6101dd61103d565b341561043257600080fd5b6101c86004356110aa565b6101dd600160a060020a03600435811690602435906044358116906064351660843560a435151561110f565b341561047457600080fd5b6101c8600160a060020a0360043516611537565b341561049357600080fd5b6101c86115d2565b34156104a657600080fd5b6101c8600160a060020a036004351661166c565b34156104c557600080fd5b6101dd600160a060020a036004358116906024351661174e565b34156104ea57600080fd5b6101c8600160a060020a03600435166024356044356117db565b341561050f57600080fd5b6102d46118c4565b341561052257600080fd5b61026a600160a060020a036004358116906024351660443560643561192a565b341561054d57600080fd5b61022f611a5a565b341561056057600080fd5b6101c8600160a060020a0360043516611a69565b341561057f57600080fd5b61026a600160a060020a0360043516611b39565b341561059e57600080fd5b6101c8600160a060020a0360043516602435604435611b4b565b34156105c357600080fd5b61026a600435611c22565b34156105d957600080fd5b6101c8600160a060020a0360043516611c33565b34156105f857600080fd5b6101c8600160a060020a0360043516611d07565b341561061757600080fd5b61022f611e73565b341561062a57600080fd5b61026a600435602435611e82565b341561064357600080fd5b61026a600160a060020a0360043516611ea3565b341561066257600080fd5b6101c8600435600160a060020a0360243516611eb5565b341561068457600080fd5b61026a600160a060020a0360043581169060243516611f48565b34156106a957600080fd5b6101dd611ff3565b34156106bc57600080fd5b61022f611ffc565b6000805433600160a060020a039081169116146106e057600080fd5b600f805460ff191660019081179091557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e73590604051901515815260200160405180910390a15060015b90565b6000805433600160a060020a0390811691161461074857600080fd5b600160a060020a03821660009081526003602052604090205460ff16151561076f57600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156108985781600160a060020a03166005828154811015156107b457fe5b600091825260209091200154600160a060020a03161415610890576005805460001981019081106107e157fe5b60009182526020909120015460058054600160a060020a03909216918390811061080757fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556005805490610843906000198301612485565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a1610898565b600101610791565b5050565b600a60205260009081526040902054600160a060020a031681565b600e6020526000908152604090205481565b6000805433600160a060020a039081169116146108e557600080fd5b600160a060020a03821615156108fa57600080fd5b600754600160a060020a03166306f2bf628360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561095357600080fd5b6102c65a03f1151561096457600080fd5b5050506040518051600160a060020a038481166000908152600a602052604090208054600160a060020a03191691831691909117905591506109a790508261200b565b81600160a060020a031663095ea7b38260ff60020a60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a0857600080fd5b6102c65a03f11515610a1957600080fd5b505050604051805190501515610a2e57600080fd5b600160a060020a0382166000908152600b6020908152604080832060ff60020a9055600c8252808320839055600d8252808320839055600e909152808220919091557f99d2b755eb38920131acb332adf086ea38d15009f223c21f3aa978d6ab234786908390839051600160a060020a039283168152911660208201526040908101905180910390a15050565b60095481565b600154600160a060020a031681565b610ad86124ae565b6004805480602002602001604051908101604052809291908181526020018280548015610b2e57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b10575b5050505050905090565b601981565b60006b204fce5e3e25026110000000821115610b5857600080fd5b50600160a060020a0382166000908152600e60205260409020546127109081018202045b92915050565b60005433600160a060020a03908116911614610b9d57600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610bfa57600080fd5b6102c65a03f11515610c0b57600080fd5b505050604051805190501515610c2057600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b60005433600160a060020a03908116911614610c9457600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610cba57600080fd5b60055460329010610cca57600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610d498382612485565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b600b6020526000908152604090205481565b60005433600160a060020a03908116911614610da257600080fd5b600160a060020a0381161515610db757600080fd5b60088054600160a060020a031916600160a060020a0383811691909117918290557f38622430bb6defd4452b087e8d0b4a6d1c4d35c179c2d7d875d4abb272b9d88b9116604051600160a060020a03909116815260200160405180910390a150565b600080808080806b204fce5e3e250261100000008b10610e3857600080fd5b6b204fce5e3e250261100000008910610e5057600080fd5b600160a060020a038c166000805160206124df8339815191521415610f1f5789945084600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ec957600080fd5b6102c65a03f11515610eda57600080fd5b505050604051805194505088841080610f0c5750600160a060020a0385166000908152600b6020526040902054898503105b15610f1a576000955061102e565b610fd2565b8b94508830600160a060020a0316311015610f3d576000955061102e565b600160a060020a0385166000818152600c602052604080822054928e9290916370a08231913091516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610fa757600080fd5b6102c65a03f11515610fb857600080fd5b50505060405180519050011115610fd2576000955061102e565b866ec097ce7bc90715b34b9f1000000000811515610fec57fe5b04925082881115611000576000955061102e565b600160a060020a0385166000908152600d602052604090205491506110258389611e82565b90508181101595505b50505050509695505050505050565b600160a060020a03331660009081526003602052604081205460ff16151561106457600080fd5b600f805460ff191690557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356000604051901515815260200160405180910390a150600190565b60005433600160a060020a039081169116146110c557600080fd5b6127108111156110d457600080fd5b60098190557f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c768160405190815260200160405180910390a150565b600f546000908190819081908190819060ff16151561112d57600080fd5b60085433600160a060020a0390811691161461114857600080fd5b6111528c8b61174e565b151561115d57600080fd5b86156111ab576000881161117057600080fd5b600160a060020a038c166000805160206124df83398151915214156111a057348b1461119b57600080fd5b6111ab565b34156111ab57600080fd5b600160a060020a038c166000805160206124df83398151915214611259578b600160a060020a03166323b872dd33308e60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561123357600080fd5b6102c65a03f1151561124457600080fd5b50505060405180519050151561125957600080fd5b6112658c8b8d8b6120c8565b9450600160028906149350600160a060020a038c166000805160206124df83398151915214156113c75783151561133f5761129f8b611c22565b600160a060020a03808c166000908152600a6020526040808220549092169450919250839163f39b5b9b91849160019160ff60020a9190516020015260405160e060020a63ffffffff8616028152600481019290925260248201526044016020604051808303818588803b151561131557600080fd5b6125ee5a03f1151561132657600080fd5b5050505060405180519350508483101561133f57600080fd5b89600160a060020a031663a9059cbb8a8760006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561139c57600080fd5b6102c65a03f115156113ad57600080fd5b5050506040518051905015156113c257600080fd5b6114af565b83151561147e57600160a060020a03808d166000908152600a602052604080822054909216935083916395e3c50b918e9160019160ff60020a91516020015260405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401602060405180830381600087803b151561144957600080fd5b6102c65a03f1151561145a57600080fd5b50505060405180519050925061146f83611c22565b92508483101561147e57600080fd5b600160a060020a03891685156108fc0286604051600060405180830381858888f1935050505015156114af57600080fd5b33600160a060020a03167f3e5691bfb48667c037c1014f0b320bbf4095c37ad5cd1f0b2573366756f54ac68d8d8d898e8a604051600160a060020a039687168152602081019590955292851660408086019190915260608501929092529093166080830152151560a082015260c001905180910390a25060019b9a5050505050505050505050565b60005433600160a060020a0390811691161461155257600080fd5b600160a060020a038116151561156757600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146115ed57600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60005433600160a060020a0390811691161461168757600080fd5b600160a060020a038116151561169c57600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b6000600160a060020a0383166000805160206124df83398151915214801561178f5750600160a060020a038281166000908152600a60205260409020541615155b806117d45750600160a060020a038381166000908152600a602052604090205416158015906117d45750600160a060020a0382166000805160206124df833981519152145b9392505050565b60005433600160a060020a039081169116146117f657600080fd5b600160a060020a038381166000908152600a602052604090205416151561181c57600080fd5b6103e882111561182b57600080fd5b6101f481111561183a57600080fd5b600160a060020a0383166000908152600d60209081526040808320859055600e909152908190208290557ff32eb6e759557a6efda6830142e2357097b173bc01c7a45d4f409fd9ce87387b90849084908490518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a1505050565b6118cc6124ae565b6005805480602002602001604051908101604052809291908181526020018280548015610b2e57602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610b10575050505050905090565b6000806000806000806000806119408c8c61174e565b151561194f5760009750611a4b565b600f5460ff1615156119645760009750611a4b565b8915156119745760009750611a4b565b600160a060020a038c166000805160206124df833981519152141561199b578a96506119c7565b600160a060020a038b166000805160206124df83398151915214156119c2578b96506119c7565b600080fd5b6119d28c8c8c6120f1565b90965094508515156119e75760009750611a4b565b6119f28b8d886120f1565b9450611a0090508787610b3d565b9250611a108c8b8d868989610e19565b91508115611a3b57611a348a84611a268f612272565b611a2f8f612272565b612330565b9050611a3e565b50835b611a4881836123cb565b97505b50505050505050949350505050565b600754600160a060020a031681565b60005433600160a060020a03908116911614611a8457600080fd5b600160a060020a03811660009081526002602052604090205460ff1615611aaa57600080fd5b60045460329010611aba57600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610d498382612485565b600c6020526000908152604090205481565b600160a060020a03331660009081526002602052604090205460ff161515611b7257600080fd5b600160a060020a038381166000908152600a6020526040902054161515611b9857600080fd5b600160a060020a0383166000908152600b60209081526040808320859055600c909152908190208290557f5421c19be109a988c30678d84f56dd237868f8147ba05c20a6b78726e8f5d8ca90849084908490518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a1505050565b600954612710908103919091020490565b60005433600160a060020a03908116911614611c4e57600080fd5b600160a060020a038181166000908152600a6020526040902054161515611c7457600080fd5b600160a060020a0381166000908152600a602090815260408083208054600160a060020a0319169055600b8252808320839055600c8252808320839055600d8252808320839055600e909152808220919091557f6621c4efc5efa31320394260425b7d14cbb9d7e3754b2c98c04af66b1cbf315b90829051600160a060020a03909116815260200160405180910390a150565b6000805433600160a060020a03908116911614611d2357600080fd5b600160a060020a03821660009081526002602052604090205460ff161515611d4a57600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156108985781600160a060020a0316600482815481101515611d8f57fe5b600091825260209091200154600160a060020a03161415611e6b57600480546000198101908110611dbc57fe5b60009182526020909120015460048054600160a060020a039092169183908110611de257fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600480546000190190611e1e9082612485565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a1610898565b600101611d6c565b600854600160a060020a031681565b60008282808201614e2082840302811515611e9957fe5b0595945050505050565b600d6020526000908152604090205481565b60005433600160a060020a03908116911614611ed057600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f193505050501515611f0157600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b6000600160a060020a0383166000805160206124df8339815191521415611f7a5750600160a060020a03811631610b7c565b82600160a060020a03166370a082318360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611fd157600080fd5b6102c65a03f11515611fe257600080fd5b505050604051805190509050610b7c565b600f5460ff1681565b600054600160a060020a031681565b600160a060020a0381166000805160206124df833981519152141561204b57600160a060020a0381166000908152600660205260409020601290556120c5565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561209157600080fd5b6102c65a03f115156120a257600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b60006120e6836120d787612272565b6120e087612272565b856123f8565b90505b949350505050565b6000808080600160a060020a0387166000805160206124df83398151915214156121c157600160a060020a038087166000908152600a602052604090205416915061213b85611c22565b90508015156121505760009350839250612268565b81600160a060020a031663cd7724c38260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561219f57600080fd5b6102c65a03f115156121b057600080fd5b50505060405180519050935061224e565b600160a060020a038088166000908152600a602052604080822054909216935061224b9184916395b68fe791899190516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561222b57600080fd5b6102c65a03f1151561223c57600080fd5b50505060405180519050611c22565b93505b612265858561225c8a612272565b611a2f8a612272565b92505b5050935093915050565b600080600160a060020a0383166000805160206124df833981519152141561229d576012915061232a565b50600160a060020a0382166000908152600660205260409020548015156123265782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561230457600080fd5b6102c65a03f1151561231557600080fd5b50505060405180519050915061232a565b8091505b50919050565b60006b204fce5e3e2502611000000085111561234b57600080fd5b6b204fce5e3e2502611000000084111561236457600080fd5b82821061239f576012838303111561237b57600080fd5b84838303600a0a02670de0b6b3a7640000850281151561239757fe5b0490506120e9565b601282840311156123af57600080fd5b84828403600a0a670de0b6b3a764000086020281151561239757fe5b6000816123d95760006123dc565b60015b60ff1660028406146123f157600183036117d4565b5090919050565b60006b204fce5e3e2502611000000085111561241357600080fd5b69d3c21bcecceda100000082111561242a57600080fd5b838310612459576012848403111561244157600080fd5b670de0b6b3a7640000858302858503600a0a02612397565b6012838503111561246957600080fd5b828403600a0a670de0b6b3a76400000282860281151561239757fe5b8154818355818115116124a9576000838152602090206124a99181019083016124c0565b505050565b60206040519081016040526000815290565b61072991905b808211156124da57600081556001016124c6565b50905600000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea165627a7a72305820386ed32aa526e4d140c16534352a5b06e0a13e482f8bd08a73fa6107f882dd060029000000000000000000000000c0a47dfe034b400b47bdad5fecda2621de6c4d950000000000000000000000008fda86efcbf7480984b6b6adf9bf7105837fb62e00000000000000000000000065bf64ff5f51272f729bdcd7acfb00677ced86cdDeployed Bytecode
0x6060604052600436106101c85763ffffffff60e060020a60003504166299d38681146101ca57806301a12fd3146101f15780630dd94b96146102105780631db950781461024b5780631fc1e25f1461027c57806324a9d8531461029b57806326782247146102ae57806327a099d8146102c157806333d8262c146103275780633a6e7d391461033a5780633ccdbb281461035c578063408ee7fe1461038557806348caa206146103a457806354a325a6146103c35780635a65d4c9146103e25780636940030f1461041457806369fe0e2d146104275780636cf698111461043d57806375829def1461046957806377f50f97146104885780637acc86781461049b5780637be98598146104ba5780637bec03aa146104df5780637c423f54146105045780637cd44272146105175780638bdb2afa146105425780639870d7fe14610555578063998614cb146105745780639b9a33ff14610593578063a9afaaaf146105b8578063abffc9ac146105ce578063ac8a584a146105ed578063b78b842d1461060c578063bc91970a1461061f578063c3e0d71214610638578063ce56c45414610657578063d4fac45d14610679578063d621e8131461069e578063f851a440146106b1575b005b34156101d557600080fd5b6101dd6106c4565b604051901515815260200160405180910390f35b34156101fc57600080fd5b6101c8600160a060020a036004351661072c565b341561021b57600080fd5b61022f600160a060020a036004351661089c565b604051600160a060020a03909116815260200160405180910390f35b341561025657600080fd5b61026a600160a060020a03600435166108b7565b60405190815260200160405180910390f35b341561028757600080fd5b6101c8600160a060020a03600435166108c9565b34156102a657600080fd5b61026a610abb565b34156102b957600080fd5b61022f610ac1565b34156102cc57600080fd5b6102d4610ad0565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156103135780820151838201526020016102fb565b505050509050019250505060405180910390f35b341561033257600080fd5b61026a610b38565b341561034557600080fd5b61026a600160a060020a0360043516602435610b3d565b341561036757600080fd5b6101c8600160a060020a036004358116906024359060443516610b82565b341561039057600080fd5b6101c8600160a060020a0360043516610c79565b34156103af57600080fd5b61026a600160a060020a0360043516610d75565b34156103ce57600080fd5b6101c8600160a060020a0360043516610d87565b34156103ed57600080fd5b6101dd600160a060020a03600435811690602435906044351660643560843560a435610e19565b341561041f57600080fd5b6101dd61103d565b341561043257600080fd5b6101c86004356110aa565b6101dd600160a060020a03600435811690602435906044358116906064351660843560a435151561110f565b341561047457600080fd5b6101c8600160a060020a0360043516611537565b341561049357600080fd5b6101c86115d2565b34156104a657600080fd5b6101c8600160a060020a036004351661166c565b34156104c557600080fd5b6101dd600160a060020a036004358116906024351661174e565b34156104ea57600080fd5b6101c8600160a060020a03600435166024356044356117db565b341561050f57600080fd5b6102d46118c4565b341561052257600080fd5b61026a600160a060020a036004358116906024351660443560643561192a565b341561054d57600080fd5b61022f611a5a565b341561056057600080fd5b6101c8600160a060020a0360043516611a69565b341561057f57600080fd5b61026a600160a060020a0360043516611b39565b341561059e57600080fd5b6101c8600160a060020a0360043516602435604435611b4b565b34156105c357600080fd5b61026a600435611c22565b34156105d957600080fd5b6101c8600160a060020a0360043516611c33565b34156105f857600080fd5b6101c8600160a060020a0360043516611d07565b341561061757600080fd5b61022f611e73565b341561062a57600080fd5b61026a600435602435611e82565b341561064357600080fd5b61026a600160a060020a0360043516611ea3565b341561066257600080fd5b6101c8600435600160a060020a0360243516611eb5565b341561068457600080fd5b61026a600160a060020a0360043581169060243516611f48565b34156106a957600080fd5b6101dd611ff3565b34156106bc57600080fd5b61022f611ffc565b6000805433600160a060020a039081169116146106e057600080fd5b600f805460ff191660019081179091557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e73590604051901515815260200160405180910390a15060015b90565b6000805433600160a060020a0390811691161461074857600080fd5b600160a060020a03821660009081526003602052604090205460ff16151561076f57600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156108985781600160a060020a03166005828154811015156107b457fe5b600091825260209091200154600160a060020a03161415610890576005805460001981019081106107e157fe5b60009182526020909120015460058054600160a060020a03909216918390811061080757fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556005805490610843906000198301612485565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a1610898565b600101610791565b5050565b600a60205260009081526040902054600160a060020a031681565b600e6020526000908152604090205481565b6000805433600160a060020a039081169116146108e557600080fd5b600160a060020a03821615156108fa57600080fd5b600754600160a060020a03166306f2bf628360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561095357600080fd5b6102c65a03f1151561096457600080fd5b5050506040518051600160a060020a038481166000908152600a602052604090208054600160a060020a03191691831691909117905591506109a790508261200b565b81600160a060020a031663095ea7b38260ff60020a60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a0857600080fd5b6102c65a03f11515610a1957600080fd5b505050604051805190501515610a2e57600080fd5b600160a060020a0382166000908152600b6020908152604080832060ff60020a9055600c8252808320839055600d8252808320839055600e909152808220919091557f99d2b755eb38920131acb332adf086ea38d15009f223c21f3aa978d6ab234786908390839051600160a060020a039283168152911660208201526040908101905180910390a15050565b60095481565b600154600160a060020a031681565b610ad86124ae565b6004805480602002602001604051908101604052809291908181526020018280548015610b2e57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b10575b5050505050905090565b601981565b60006b204fce5e3e25026110000000821115610b5857600080fd5b50600160a060020a0382166000908152600e60205260409020546127109081018202045b92915050565b60005433600160a060020a03908116911614610b9d57600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610bfa57600080fd5b6102c65a03f11515610c0b57600080fd5b505050604051805190501515610c2057600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b60005433600160a060020a03908116911614610c9457600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610cba57600080fd5b60055460329010610cca57600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610d498382612485565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b600b6020526000908152604090205481565b60005433600160a060020a03908116911614610da257600080fd5b600160a060020a0381161515610db757600080fd5b60088054600160a060020a031916600160a060020a0383811691909117918290557f38622430bb6defd4452b087e8d0b4a6d1c4d35c179c2d7d875d4abb272b9d88b9116604051600160a060020a03909116815260200160405180910390a150565b600080808080806b204fce5e3e250261100000008b10610e3857600080fd5b6b204fce5e3e250261100000008910610e5057600080fd5b600160a060020a038c166000805160206124df8339815191521415610f1f5789945084600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ec957600080fd5b6102c65a03f11515610eda57600080fd5b505050604051805194505088841080610f0c5750600160a060020a0385166000908152600b6020526040902054898503105b15610f1a576000955061102e565b610fd2565b8b94508830600160a060020a0316311015610f3d576000955061102e565b600160a060020a0385166000818152600c602052604080822054928e9290916370a08231913091516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610fa757600080fd5b6102c65a03f11515610fb857600080fd5b50505060405180519050011115610fd2576000955061102e565b866ec097ce7bc90715b34b9f1000000000811515610fec57fe5b04925082881115611000576000955061102e565b600160a060020a0385166000908152600d602052604090205491506110258389611e82565b90508181101595505b50505050509695505050505050565b600160a060020a03331660009081526003602052604081205460ff16151561106457600080fd5b600f805460ff191690557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356000604051901515815260200160405180910390a150600190565b60005433600160a060020a039081169116146110c557600080fd5b6127108111156110d457600080fd5b60098190557f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c768160405190815260200160405180910390a150565b600f546000908190819081908190819060ff16151561112d57600080fd5b60085433600160a060020a0390811691161461114857600080fd5b6111528c8b61174e565b151561115d57600080fd5b86156111ab576000881161117057600080fd5b600160a060020a038c166000805160206124df83398151915214156111a057348b1461119b57600080fd5b6111ab565b34156111ab57600080fd5b600160a060020a038c166000805160206124df83398151915214611259578b600160a060020a03166323b872dd33308e60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561123357600080fd5b6102c65a03f1151561124457600080fd5b50505060405180519050151561125957600080fd5b6112658c8b8d8b6120c8565b9450600160028906149350600160a060020a038c166000805160206124df83398151915214156113c75783151561133f5761129f8b611c22565b600160a060020a03808c166000908152600a6020526040808220549092169450919250839163f39b5b9b91849160019160ff60020a9190516020015260405160e060020a63ffffffff8616028152600481019290925260248201526044016020604051808303818588803b151561131557600080fd5b6125ee5a03f1151561132657600080fd5b5050505060405180519350508483101561133f57600080fd5b89600160a060020a031663a9059cbb8a8760006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561139c57600080fd5b6102c65a03f115156113ad57600080fd5b5050506040518051905015156113c257600080fd5b6114af565b83151561147e57600160a060020a03808d166000908152600a602052604080822054909216935083916395e3c50b918e9160019160ff60020a91516020015260405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401602060405180830381600087803b151561144957600080fd5b6102c65a03f1151561145a57600080fd5b50505060405180519050925061146f83611c22565b92508483101561147e57600080fd5b600160a060020a03891685156108fc0286604051600060405180830381858888f1935050505015156114af57600080fd5b33600160a060020a03167f3e5691bfb48667c037c1014f0b320bbf4095c37ad5cd1f0b2573366756f54ac68d8d8d898e8a604051600160a060020a039687168152602081019590955292851660408086019190915260608501929092529093166080830152151560a082015260c001905180910390a25060019b9a5050505050505050505050565b60005433600160a060020a0390811691161461155257600080fd5b600160a060020a038116151561156757600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146115ed57600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60005433600160a060020a0390811691161461168757600080fd5b600160a060020a038116151561169c57600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b6000600160a060020a0383166000805160206124df83398151915214801561178f5750600160a060020a038281166000908152600a60205260409020541615155b806117d45750600160a060020a038381166000908152600a602052604090205416158015906117d45750600160a060020a0382166000805160206124df833981519152145b9392505050565b60005433600160a060020a039081169116146117f657600080fd5b600160a060020a038381166000908152600a602052604090205416151561181c57600080fd5b6103e882111561182b57600080fd5b6101f481111561183a57600080fd5b600160a060020a0383166000908152600d60209081526040808320859055600e909152908190208290557ff32eb6e759557a6efda6830142e2357097b173bc01c7a45d4f409fd9ce87387b90849084908490518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a1505050565b6118cc6124ae565b6005805480602002602001604051908101604052809291908181526020018280548015610b2e57602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610b10575050505050905090565b6000806000806000806000806119408c8c61174e565b151561194f5760009750611a4b565b600f5460ff1615156119645760009750611a4b565b8915156119745760009750611a4b565b600160a060020a038c166000805160206124df833981519152141561199b578a96506119c7565b600160a060020a038b166000805160206124df83398151915214156119c2578b96506119c7565b600080fd5b6119d28c8c8c6120f1565b90965094508515156119e75760009750611a4b565b6119f28b8d886120f1565b9450611a0090508787610b3d565b9250611a108c8b8d868989610e19565b91508115611a3b57611a348a84611a268f612272565b611a2f8f612272565b612330565b9050611a3e565b50835b611a4881836123cb565b97505b50505050505050949350505050565b600754600160a060020a031681565b60005433600160a060020a03908116911614611a8457600080fd5b600160a060020a03811660009081526002602052604090205460ff1615611aaa57600080fd5b60045460329010611aba57600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610d498382612485565b600c6020526000908152604090205481565b600160a060020a03331660009081526002602052604090205460ff161515611b7257600080fd5b600160a060020a038381166000908152600a6020526040902054161515611b9857600080fd5b600160a060020a0383166000908152600b60209081526040808320859055600c909152908190208290557f5421c19be109a988c30678d84f56dd237868f8147ba05c20a6b78726e8f5d8ca90849084908490518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a1505050565b600954612710908103919091020490565b60005433600160a060020a03908116911614611c4e57600080fd5b600160a060020a038181166000908152600a6020526040902054161515611c7457600080fd5b600160a060020a0381166000908152600a602090815260408083208054600160a060020a0319169055600b8252808320839055600c8252808320839055600d8252808320839055600e909152808220919091557f6621c4efc5efa31320394260425b7d14cbb9d7e3754b2c98c04af66b1cbf315b90829051600160a060020a03909116815260200160405180910390a150565b6000805433600160a060020a03908116911614611d2357600080fd5b600160a060020a03821660009081526002602052604090205460ff161515611d4a57600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156108985781600160a060020a0316600482815481101515611d8f57fe5b600091825260209091200154600160a060020a03161415611e6b57600480546000198101908110611dbc57fe5b60009182526020909120015460048054600160a060020a039092169183908110611de257fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600480546000190190611e1e9082612485565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a1610898565b600101611d6c565b600854600160a060020a031681565b60008282808201614e2082840302811515611e9957fe5b0595945050505050565b600d6020526000908152604090205481565b60005433600160a060020a03908116911614611ed057600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f193505050501515611f0157600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b6000600160a060020a0383166000805160206124df8339815191521415611f7a5750600160a060020a03811631610b7c565b82600160a060020a03166370a082318360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611fd157600080fd5b6102c65a03f11515611fe257600080fd5b505050604051805190509050610b7c565b600f5460ff1681565b600054600160a060020a031681565b600160a060020a0381166000805160206124df833981519152141561204b57600160a060020a0381166000908152600660205260409020601290556120c5565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561209157600080fd5b6102c65a03f115156120a257600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b60006120e6836120d787612272565b6120e087612272565b856123f8565b90505b949350505050565b6000808080600160a060020a0387166000805160206124df83398151915214156121c157600160a060020a038087166000908152600a602052604090205416915061213b85611c22565b90508015156121505760009350839250612268565b81600160a060020a031663cd7724c38260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561219f57600080fd5b6102c65a03f115156121b057600080fd5b50505060405180519050935061224e565b600160a060020a038088166000908152600a602052604080822054909216935061224b9184916395b68fe791899190516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561222b57600080fd5b6102c65a03f1151561223c57600080fd5b50505060405180519050611c22565b93505b612265858561225c8a612272565b611a2f8a612272565b92505b5050935093915050565b600080600160a060020a0383166000805160206124df833981519152141561229d576012915061232a565b50600160a060020a0382166000908152600660205260409020548015156123265782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561230457600080fd5b6102c65a03f1151561231557600080fd5b50505060405180519050915061232a565b8091505b50919050565b60006b204fce5e3e2502611000000085111561234b57600080fd5b6b204fce5e3e2502611000000084111561236457600080fd5b82821061239f576012838303111561237b57600080fd5b84838303600a0a02670de0b6b3a7640000850281151561239757fe5b0490506120e9565b601282840311156123af57600080fd5b84828403600a0a670de0b6b3a764000086020281151561239757fe5b6000816123d95760006123dc565b60015b60ff1660028406146123f157600183036117d4565b5090919050565b60006b204fce5e3e2502611000000085111561241357600080fd5b69d3c21bcecceda100000082111561242a57600080fd5b838310612459576012848403111561244157600080fd5b670de0b6b3a7640000858302858503600a0a02612397565b6012838503111561246957600080fd5b828403600a0a670de0b6b3a76400000282860281151561239757fe5b8154818355818115116124a9576000838152602090206124a99181019083016124c0565b505050565b60206040519081016040526000815290565b61072991905b808211156124da57600081556001016124c6565b50905600000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea165627a7a72305820386ed32aa526e4d140c16534352a5b06e0a13e482f8bd08a73fa6107f882dd060029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c0a47dfe034b400b47bdad5fecda2621de6c4d950000000000000000000000008fda86efcbf7480984b6b6adf9bf7105837fb62e00000000000000000000000065bf64ff5f51272f729bdcd7acfb00677ced86cd
-----Decoded View---------------
Arg [0] : _uniswapFactory (address): 0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95
Arg [1] : _admin (address): 0x8fDa86efcBf7480984b6B6AdF9Bf7105837Fb62e
Arg [2] : _kyberNetwork (address): 0x65bF64Ff5f51272f729BDcD7AcFB00677ced86Cd
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c0a47dfe034b400b47bdad5fecda2621de6c4d95
Arg [1] : 0000000000000000000000008fda86efcbf7480984b6b6adf9bf7105837fb62e
Arg [2] : 00000000000000000000000065bf64ff5f51272f729bdcd7acfb00677ced86cdDeployed Bytecode Sourcemap
11941:14886:0:-;;;;;;;;;-1:-1:-1;;;11941:14886:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22573:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3292:463;;;;;;;;;;-1:-1:-1;;;;;3292:463:0;;;;;12305:49;;;;;;;;;;-1:-1:-1;;;;;12305:49:0;;;;;;;;-1:-1:-1;;;;;12305:49:0;;;;;;;;;;;;;;12800:56;;;;;;;;;;-1:-1:-1;;;;;12800:56:0;;;;;;;;;;;;;;;;;;;;20833:723;;;;;;;;;;-1:-1:-1;;;;;20833:723:0;;;;;12177:36;;;;;;;;;;;;916:27;;;;;;;;;;;;1527:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;71:3;;;64:6;52:2;45:3;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;12048:41:0;;;;;;;;;;;;25591:249;;;;;;;;;;-1:-1:-1;;;;;25591:249:0;;;;;;;5193:189;;;;;;;;;;-1:-1:-1;;;;;5193:189:0;;;;;;;;;;;;;2976:308;;;;;;;;;;-1:-1:-1;;;;;2976:308:0;;;;;12428:53;;;;;;;;;;-1:-1:-1;;;;;12428:53:0;;;;;23012:229;;;;;;;;;;-1:-1:-1;;;;;23012:229:0;;;;;23506:1364;;;;;;;;;;-1:-1:-1;;;;;23506:1364:0;;;;;;;;;;;;;;;;;;;22756:180;;;;;;;;;;;;19302:175;;;;;;;;;;;;;;16245:2998;;-1:-1:-1;;;;;16245:2998:0;;;;;;;;;;;;;;;;;;;;;;;;1945:187;;;;;;;;;;-1:-1:-1;;;;;1945:187:0;;;;;2714:194;;;;;;;;;;;;2313:223;;;;;;;;;;-1:-1:-1;;;;;2313:223:0;;;;;22069:440;;;;;;;;;;-1:-1:-1;;;;;22069:440:0;;;;;;;;;;19614:560;;;;;;;;;;-1:-1:-1;;;;;19614:560:0;;;;;;;;;1633:96;;;;;;;;;;;;13627:1998;;;;;;;;;;-1:-1:-1;;;;;13627:1998:0;;;;;;;;;;;;;;12098:36;;;;;;;;;;;;3824:319;;;;;;;;;;-1:-1:-1;;;;;3824:319:0;;;;;12488:53;;;;;;;;;;-1:-1:-1;;;;;12488:53:0;;;;;20308:427;;;;;;;;;;-1:-1:-1;;;;;20308:427:0;;;;;;;;;25418:165;;;;;;;;;;;;;;21605:456;;;;;;;;;;-1:-1:-1;;;;;21605:456:0;;;;;4151:481;;;;;;;;;;-1:-1:-1;;;;;4151:481:0;;;;;12141:27;;;;;;;;;;;;25115:295;;;;;;;;;;;;;;;;12641:63;;;;;;;;;;-1:-1:-1;;;;;12641:63:0;;;;;5494:153;;;;;;;;;;;;-1:-1:-1;;;;;5494:153:0;;;;;9062:213;;;;;;;;;;-1:-1:-1;;;;;9062:213:0;;;;;;;;;;12865:31;;;;;;;;;;;;889:20;;;;;;;;;;;;22573:175;22648:4;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;22670:12;:19;;-1:-1:-1;;22670:19:0;22685:4;22670:19;;;;;;22700:18;;;;;;;;;;;;;;;;;;-1:-1:-1;22736:4:0;1326:1;22573:175;:::o;3292:463::-;3441:6;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;3369:17:0;;;;;;:8;:17;;;;;;;;3361:26;;;;;;;;-1:-1:-1;;;;;;3398:17:0;;3418:5;3398:17;;;:8;:17;;;;;:25;;-1:-1:-1;;3398:25:0;;;3436:312;3457:13;:20;3453:24;;3436:312;;;3523:7;-1:-1:-1;;;;;3503:27:0;:13;3517:1;3503:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3503:16:0;:27;3499:238;;;3570:13;3584:20;;-1:-1:-1;;3584:24:0;;;3570:39;;;;;;;;;;;;;;;;3551:13;:16;;-1:-1:-1;;;;;3570:39:0;;;;3565:1;;3551:16;;;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;3551:58:0;-1:-1:-1;;;;;3551:58:0;;;;;;;;;;3628:13;:22;;;;;-1:-1:-1;;3628:22:0;;;:::i;:::-;;3669:28;3682:7;3691:5;3669:28;;-1:-1:-1;;;;;3669:28:0;;;;;;;;;;;;;;;;;;;;;;3716:5;;3499:238;3479:3;;3436:312;;;3292:463;;:::o;12305:49::-;;;;;;;;;;;;-1:-1:-1;;;;;12305:49:0;;:::o;12800:56::-;;;;;;;;;;;;;:::o;20833:723::-;20957:31;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;20924:19:0;;;;20916:28;;;;;;21021:14;;-1:-1:-1;;;;;21021:14:0;:26;21048:5;21021:14;:33;;;;;;;-1:-1:-1;;;21021:33:0;;;;;;-1:-1:-1;;;;;21021:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21076:29:0;;;;;;;:13;:29;;;;;:56;;-1:-1:-1;;;;;;21076:56:0;;;;;;;;;;;-1:-1:-1;21143:18:0;;-1:-1:-1;21076:29:0;21143:11;:18::i;:::-;21182:5;-1:-1:-1;;;;;21182:13:0;;21196:15;-1:-1:-1;;;21182:40:0;;;;;;;;-1:-1:-1;;;21182:40:0;;;;;;-1:-1:-1;;;;;21182:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21174:49;;;;;;;;-1:-1:-1;;;;;21287:36:0;;;;;;:20;:36;;;;;;;;-1:-1:-1;;;21287:47:0;;21345:20;:36;;;;;:40;;;21396:30;:46;;;;;:50;;;21457:23;:39;;;;;;:43;;;;21513:35;;21316:5;;21532:15;;21513:35;-1:-1:-1;;;;;21513:35:0;;;;;;;;;;;;;;;;;;;;;;20833:723;;:::o;12177:36::-;;;;:::o;916:27::-;;;-1:-1:-1;;;;;916:27:0;;:::o;1527:98::-;1574:9;;:::i;:::-;1603:14;1596:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1596:21:0;;;;;;;;;;;;;;;;;;;;;;;1527:98;:::o;12048:41::-;12087:2;12048:41;:::o;25591:249::-;25709:4;6481:6;25739:17;;;25731:26;;;;;;-1:-1:-1;;;;;;25793:30:0;;;;;;:23;:30;;;;;;25827:5;25785:38;;;25775:49;;:57;25591:249;;;;;:::o;5193:189::-;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;5296:5;-1:-1:-1;;;;;5296:14:0;;5311:6;5319;5296:30;;;;;;;;-1:-1:-1;;;5296:30:0;;;;;;-1:-1:-1;;;;;5296:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5288:39;;;;;;;;5338:36;5352:5;5359:6;5367;5338:36;;-1:-1:-1;;;;;5338:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5193:189;;;:::o;2976:308::-;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;3053:20:0;;;;;;:8;:20;;;;;;;;3052:21;3044:30;;;;;;3116:13;:20;1164:2;3116:37;;3108:46;;;;;;3167:30;3180:10;3192:4;3167:30;;-1:-1:-1;;;;;3167:30:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3208:20:0;;;;;;:8;:20;;;;;:27;;-1:-1:-1;;3208:27:0;3231:4;3208:27;;;;;;3246:13;:30;;:13;;:30;;;:13;:30;;:::i;:::-;-1:-1:-1;3246:30:0;;;;;;;;;;;-1:-1:-1;;;;;;3246:30:0;-1:-1:-1;;;;;3246:30:0;;;;;;;;;;2976:308::o;12428:53::-;;;;;;;;;;;;;:::o;23012:229::-;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;23135:18:0;;;;23127:27;;;;;;23165:12;:28;;-1:-1:-1;;;;;;23165:28:0;-1:-1:-1;;;;;23165:28:0;;;;;;;;;;;23204:29;;23220:12;23204:29;;-1:-1:-1;;;;;23204:29:0;;;;;;;;;;;;;;23012:229;:::o;23506:1364::-;23752:4;;;;;;6481:6;23782:19;;23774:28;;;;;;6481:6;23821:20;;23813:29;;;;;;-1:-1:-1;;;;;23942:29:0;;-1:-1:-1;;;;;;;;;;;23942:29:0;23938:572;;;23996:9;23988:17;;24040:5;-1:-1:-1;;;;;24040:15:0;;24056:4;24040:21;;;;;;;;-1:-1:-1;;;24040:21:0;;;;;;-1:-1:-1;;;;;24040:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24098:25:0;;;;:101;;-1:-1:-1;;;;;;24172:27:0;;;;;;:20;:27;;;;;;24144:25;;;:55;24098:101;24076:186;;;24241:5;24234:12;;;;24076:186;23938:572;;;24302:8;24294:16;;24344:10;24329:4;-1:-1:-1;;;;;24329:12:0;;:25;24325:43;;;24363:5;24356:12;;;;24325:43;-1:-1:-1;;;;;24423:27:0;;;;;;:20;:27;;;;;;;;24411:9;;24423:27;;24387:15;;24403:4;;24387:21;;;;;;-1:-1:-1;;;24387:21:0;;;;;;-1:-1:-1;;;;;24387:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:33;:63;24383:116;;;24478:5;24471:12;;;;24383:116;24558:11;24547:8;:22;;;;;;;;24522:47;;24632:17;24618:11;:31;24614:49;;;24658:5;24651:12;;;;24614:49;-1:-1:-1;;;;;24700:37:0;;;;;;:30;:37;;;;;;;-1:-1:-1;24767:50:0;24786:17;24805:11;24767:18;:50::i;:::-;24748:70;;24846:16;24836:6;:26;;24829:33;;23506:1364;;;;;;;;;;;;;;:::o;22756:180::-;-1:-1:-1;;;;;1487:10:0;1478:20;22834:4;1478:20;;;:8;:20;;;;;;;;1470:29;;;;;;;;22856:12;:20;;-1:-1:-1;;22856:20:0;;;22887:19;22871:5;22887:19;;;;;;;;;;;;;;;;-1:-1:-1;22924:4:0;22756:180;:::o;19302:175::-;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;19410:5;19403:12;;;19395:21;;;;;;19429:6;:12;;;19454:15;19438:3;19454:15;;;;;;;;;;;;;;19302:175;:::o;16245:2998::-;16507:12;;16477:4;;;;;;;;;;;;16507:12;;16499:21;;;;;;;;16553:12;;16539:10;-1:-1:-1;;;;;16539:26:0;;;16553:12;;16539:26;16531:35;;;;;;16585:34;16599:8;16609:9;16585:13;:34::i;:::-;16577:43;;;;;;;;16637:8;16633:226;;;16687:1;16670:18;;16662:27;;;;;;-1:-1:-1;;;;;16708:29:0;;-1:-1:-1;;;;;;;;;;;16708:29:0;16704:143;;;16764:9;:22;;16756:31;;;;;;16704:143;;;16832:9;:14;16824:23;;;;;;-1:-1:-1;;;;;17051:29:0;;-1:-1:-1;;;;;;;;;;;17051:29:0;17047:116;;17103:8;-1:-1:-1;;;;;17103:21:0;;17125:10;17145:4;17152:9;17103:59;;;;;;;;-1:-1:-1;;;17103:59:0;;;;;;-1:-1:-1;;;;;17103:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17095:68;;;;;;;;17202:173;17231:8;17264:9;17299;17339:14;17202;:173::i;:::-;17176:199;-1:-1:-1;17438:1:0;17433;17416:18;;:23;;-1:-1:-1;;;;;;17517:29:0;;-1:-1:-1;;;;;;;;;;;17517:29:0;17513:1358;;;17568:20;17567:21;17563:510;;;17684:20;17694:9;17684;:20::i;:::-;-1:-1:-1;;;;;17750:33:0;;;;;;;:13;:33;;;;;;;;;;;-1:-1:-1;17668:36:0;;-1:-1:-1;17750:33:0;;17816:28;;17668:36;;17750:33;;-1:-1:-1;;;17955:8:0;17750:33;17816:181;;;;;;-1:-1:-1;;;17816:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18024:32:0;;;;18016:41;;;;;;18148:9;-1:-1:-1;;;;;18148:18:0;;18167:11;18180:18;18148:51;;;;;;;;-1:-1:-1;;;18148:51:0;;;;;;-1:-1:-1;;;;;18148:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18140:60;;;;;;;;17513:1358;;;18238:20;18237:21;18233:519;;;-1:-1:-1;;;;;18306:32:0;;;;;;;:13;:32;;;;;;;;;;;-1:-1:-1;18306:32:0;;18371:28;;18422:9;;18306:32;;-1:-1:-1;;;18523:8:0;18371:194;;;;;;-1:-1:-1;;;18371:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18358:207;;18655:21;18665:10;18655:9;:21::i;:::-;18642:34;-1:-1:-1;18703:32:0;;;;18695:41;;;;;;-1:-1:-1;;;;;18819:20:0;;:40;;;;18840:18;18819:40;;;;;;;;;;;;;;;;;;;;;;;;;;18910:10;-1:-1:-1;;;;;18883:330:0;;18948:8;18981:9;19021;19061:18;19111:11;19155:20;18883:330;;-1:-1:-1;;;;;18883:330:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19231:4:0;;16245:2998;-1:-1:-1;;;;;;;;;;;16245:2998:0:o;1945:187::-;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;2022:22:0;;;;2014:31;;;;;;2077:12;;2056:34;;-1:-1:-1;;;;;2077:12:0;2056:34;;-1:-1:-1;;;;;2056:34:0;;;;;;;;;;;;;;2101:12;:23;;-1:-1:-1;;;;;;2101:23:0;-1:-1:-1;;;;;2101:23:0;;;;;;;;;;1945:187::o;2714:194::-;2762:12;;2778:10;-1:-1:-1;;;;;2762:26:0;;;:12;;:26;2754:35;;;;;;2813:12;;;2827:5;2800:33;;-1:-1:-1;;;;;2813:12:0;;;;2827:5;2800:33;;-1:-1:-1;;;;;2800:33:0;;;;;;;;;;;;;;;;;;;;;;2852:12;;;;2844:20;;-1:-1:-1;;;;;;2844:20:0;;;-1:-1:-1;;;;;2852:12:0;;2844:20;;;;2875:25;;;2714:194::o;2313:223::-;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;2397:22:0;;;;2389:31;;;;;;2431:30;2452:8;2431:30;;-1:-1:-1;;;;;2431:30:0;;;;;;;;;;;;;;2495:5;;2472:29;;2485:8;;-1:-1:-1;;;;;2495:5:0;2472:29;;-1:-1:-1;;;;;2472:29:0;;;;;;;;;;;;;;;;;;;;;;2512:5;:16;;-1:-1:-1;;;;;;2512:16:0;-1:-1:-1;;;;;2512:16:0;;;;;;;;;;2313:223::o;22069:440::-;22187:4;-1:-1:-1;;;;;22250:24:0;;-1:-1:-1;;;;;;;;;;;22250:24:0;:87;;;;-1:-1:-1;;;;;;22295:28:0;;;22335:1;22295:28;;;:13;:28;;;;;;;:42;;22250:87;22231:259;;;-1:-1:-1;;;;;;22388:27:0;;;22427:1;22388:27;;;:13;:27;;;;;;;:41;;;;:87;;-1:-1:-1;;;;;;22450:25:0;;-1:-1:-1;;;;;;;;;;;22450:25:0;22388:87;22209:292;22069:440;-1:-1:-1;;;22069:440:0:o;19614:560::-;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;19793:29:0;;;19834:1;19793:29;;;:13;:29;;;;;;;:43;;19785:52;;;;;;19872:4;19856:20;;;19848:29;;;;;;19931:3;19917:17;;;19909:26;;;;;;-1:-1:-1;;;;;19965:46:0;;;;;;:30;:46;;;;;;;;:61;;;20037:23;:39;;;;;;;:52;;;20102:64;;20004:5;;20014:12;;20079:10;;20102:64;;;-1:-1:-1;;;;;20102:64:0;-1:-1:-1;;;;;20102:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;19614:560;;;:::o;1633:96::-;1679:9;;:::i;:::-;1708:13;1701:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1701:20:0;;;;;;;;;;;;;;;;;;;;;;1633:96;:::o;13627:1998::-;13798:4;14019:11;14323:22;14356:16;14383;14629:24;14705:25;15027:9;13898:24;13912:3;13917:4;13898:13;:24::i;:::-;13897:25;13893:39;;;13931:1;13924:8;;;;13893:39;13948:12;;;;13947:13;13943:27;;;13969:1;13962:8;;;;13943:27;13985:11;;13981:25;;;14005:1;13998:8;;;;13981:25;-1:-1:-1;;;;;14045:24:0;;-1:-1:-1;;;;;;;;;;;14045:24:0;14041:270;;;14094:4;14086:12;;14041:270;;;-1:-1:-1;;;;;14120:25:0;;-1:-1:-1;;;;;;;;;;;14120:25:0;14116:195;;;14170:3;14162:11;;14116:195;;;14291:8;;;14116:195;14445:40;14467:3;14472:4;14478:6;14445:21;:40::i;:::-;14410:75;;-1:-1:-1;14410:75:0;-1:-1:-1;14502:22:0;;14498:36;;;14533:1;14526:8;;;;14498:36;14565:51;14587:4;14593:3;14598:17;14565:21;:51::i;:::-;14547:69;-1:-1:-1;14656:36:0;;-1:-1:-1;14667:5:0;14674:17;14656:10;:36::i;:::-;14629:63;;14733:281;14774:3;14807:6;14844:4;14879:19;14930:11;14974;14733:26;:281::i;:::-;14705:309;;15051:20;15047:493;;;15173:233;15207:6;15248:19;15303:16;15315:3;15303:11;:16::i;:::-;15356:17;15368:4;15356:11;:17::i;:::-;15173:15;:233::i;:::-;15166:240;;15047:493;;;-1:-1:-1;15517:11:0;15047:493;15557:60;15590:4;15596:20;15557:32;:60::i;:::-;15550:67;;13627:1998;;;;;;;;;;;;;;:::o;12098:36::-;;;-1:-1:-1;;;;;12098:36:0;;:::o;3824:319::-;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;3903:22:0;;;;;;:9;:22;;;;;;;;3902:23;3894:32;;;;;;3968:14;:21;1164:2;3968:38;;3960:47;;;;;;4020:32;4034:11;4047:4;4020:32;;-1:-1:-1;;;;;4020:32:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4063:22:0;;;;;;:9;:22;;;;;:29;;-1:-1:-1;;4063:29:0;4088:4;4063:29;;;;;;4103:14;:32;;:14;;:32;;;:14;:32;;:::i;12488:53::-;;;;;;;;;;;;;:::o;20308:427::-;-1:-1:-1;;;;;1396:10:0;1386:21;;;;;:9;:21;;;;;;;;1378:30;;;;;;;;-1:-1:-1;;;;;20487:29:0;;;20528:1;20487:29;;;:13;:29;;;;;;;:43;;20479:52;;;;;;-1:-1:-1;;;;;20544:36:0;;;;;;:20;:36;;;;;;;;:49;;;20604:20;:36;;;;;;;:49;;;20666:61;;20573:5;;20583:10;;20643;;20666:61;;;-1:-1:-1;;;;;20666:61:0;-1:-1:-1;;;;;20666:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20308:427;;;:::o;25418:165::-;25560:6;;25570:5;25552:14;;;25542:25;;;;:33;;25418:165::o;21605:456::-;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;21698:29:0;;;21739:1;21698:29;;;:13;:29;;;;;;;:43;;21690:52;;;;;;-1:-1:-1;;;;;21762:29:0;;;;;;:13;:29;;;;;;;;21755:36;;-1:-1:-1;;;;;;21755:36:0;;;21809:20;:36;;;;;21802:43;;;21863:20;:36;;;;;21856:43;;;21917:30;:46;;;;;21910:53;;;21981:23;:39;;;;;;21974:46;;;;22033:20;;21784:5;;22033:20;-1:-1:-1;;;;;22033:20:0;;;;;;;;;;;;;;21605:456;:::o;4151:481::-;4306:6;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;4230:19:0;;;;;;:9;:19;;;;;;;;4222:28;;;;;;;;-1:-1:-1;;;;;;4261:19:0;;4283:5;4261:19;;;:9;:19;;;;;:27;;-1:-1:-1;;4261:27:0;;;4301:324;4322:14;:21;4318:25;;4301:324;;;4390:8;-1:-1:-1;;;;;4369:29:0;:14;4384:1;4369:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4369:17:0;:29;4365:249;;;4439:14;4454:21;;-1:-1:-1;;4454:25:0;;;4439:41;;;;;;;;;;;;;;;;4419:14;:17;;-1:-1:-1;;;;;4439:41:0;;;;4434:1;;4419:17;;;;;;;;;;;;;;;:61;;-1:-1:-1;;;;;;4419:61:0;-1:-1:-1;;;;;4419:61:0;;;;;;;;;;4499:14;:26;;-1:-1:-1;;4499:26:0;;;;;;:::i;:::-;;4544:30;4558:8;4568:5;4544:30;;-1:-1:-1;;;;;4544:30:0;;;;;;;;;;;;;;;;;;;;;;4593:5;;4365:249;4345:3;;4301:324;;12141:27;;;-1:-1:-1;;;;;12141:27:0;;:::o;25115:295::-;25245:3;25284:8;25322;25384:17;;;25349:9;25362:17;;;25349:31;:53;;;;;;;;;25115:295;-1:-1:-1;;;;;25115:295:0:o;12641:63::-;;;;;;;;;;;;;:::o;5494:153::-;1309:5;;1295:10;-1:-1:-1;;;;;1295:19:0;;;1309:5;;1295:19;1287:28;;;;;;-1:-1:-1;;;;;5576:15:0;;:23;;;;5592:6;5576:23;;;;;;;;;;;;;;;;;;;;;;;;;;5610:29;5624:6;5632;5610:29;;;;;-1:-1:-1;;;;;5610:29:0;;;;;;;;;;;;;;;;5494:153;;:::o;9062:213::-;9129:4;-1:-1:-1;;;;;9150:26:0;;-1:-1:-1;;;;;;;;;;;9150:26:0;9146:121;;;-1:-1:-1;;;;;;9198:12:0;;;9191:19;;9146:121;9246:5;-1:-1:-1;;;;;9246:15:0;;9262:4;9246:21;;;;;;;;-1:-1:-1;;;9246:21:0;;;;;;-1:-1:-1;;;;;9246:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9239:28;;;;12865:31;;;;;;:::o;889:20::-;;;-1:-1:-1;;;;;889:20:0;;:::o;6743:174::-;-1:-1:-1;;;;;6801:26:0;;-1:-1:-1;;;;;;;;;;;6801:26:0;6797:112;;;-1:-1:-1;;;;;6829:15:0;;;;;;:8;:15;;;;;6685:2;6829:30;;6797:112;;;6893:5;-1:-1:-1;;;;;6893:14:0;;:16;;;;;;;;;;;-1:-1:-1;;;6893:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6875:15:0;;;;;;:8;:15;;;;;:34;-1:-1:-1;6797:112:0;6743:174;:::o;9478:192::-;9574:4;9598:64;9609:9;9620:16;9632:3;9620:11;:16::i;:::-;9638:17;9650:4;9638:11;:17::i;:::-;9657:4;9598:10;:64::i;:::-;9591:71;;9478:192;;;;;;;:::o;25848:976::-;25998:12;;;;-1:-1:-1;;;;;26078:24:0;;-1:-1:-1;;;;;;;;;;;26078:24:0;26074:522;;;-1:-1:-1;;;;;26146:28:0;;;;;;;:13;:28;;;;;;;;-1:-1:-1;26213:17:0;26223:6;26213:9;:17::i;:::-;26192:38;-1:-1:-1;26249:18:0;;26245:37;;;26277:1;;-1:-1:-1;26277:1:0;;-1:-1:-1;26269:13:0;;26245:37;26309:8;-1:-1:-1;;;;;26309:32:0;;26360:13;26309:79;;;;;;;;-1:-1:-1;;;26309:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26299:89;;26074:522;;;-1:-1:-1;;;;;26448:27:0;;;;;;;:13;:27;;;;;;;;;;;-1:-1:-1;26501:83:0;;26448:27;;26529:32;;26562:6;;26448:27;26529:40;;;;;;-1:-1:-1;;;26529:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26501:9;:83::i;:::-;26491:93;;26074:522;26615:201;26645:6;26682:7;26721:16;26733:3;26721:11;:16::i;:::-;26770:17;26782:4;26770:11;:17::i;26615:201::-;26608:208;;25848:976;;;;;;;;;:::o;6925:479::-;6981:4;;-1:-1:-1;;;;;7002:26:0;;-1:-1:-1;;;;;;;;;;;7002:26:0;6998:51;;;6685:2;7030:19;;;;6998:51;-1:-1:-1;;;;;;7104:15:0;;;;;;:8;:15;;;;;;7320:18;;7317:46;;;7347:5;-1:-1:-1;;;;;7347:14:0;;:16;;;;;;;;;;;-1:-1:-1;;;7347:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7340:23;;;;7317:46;7383:13;7376:20;;6925:479;;;;;:::o;9879:627::-;10004:4;6481:6;10034:20;;;10026:29;;;;;;6481:6;10074:21;;;10066:30;;;;;;10113:26;;;10109:390;;6637:2;10165:25;;;10164:43;;10156:52;;;;;;10295:9;10279:11;10265;:25;10258:2;:33;10257:47;6430:6;10231:10;:22;:74;;;;;;;;10223:83;;;;10109:390;6637:2;10348:25;;;10347:43;;10339:52;;;;;;10477:9;10461:11;10447;:25;10440:2;:33;6430:6;10414:10;:22;:60;:72;;;;;;15633:277;15787:4;15829:20;:28;;15856:1;15829:28;;;15852:1;15829:28;15816:42;;15823:1;15816:4;:8;:42;:86;;15901:1;15894:4;:8;15816:86;;;-1:-1:-1;15874:4:0;;15633:277;-1:-1:-1;15633:277:0:o;7412:569::-;7514:4;6481:6;7539:17;;;7531:26;;;;;;6546:17;7576:16;;;7568:25;;;;;;7610:26;;;7606:368;;6637:2;7662:25;;;7661:43;;7653:52;;;;;;6430:6;7728:13;;;7750:25;;;7745:2;:31;7728:49;7727:63;;7606:368;6637:2;7832:25;;;7831:43;;7823:52;;;;;;7948:11;7934;:25;7929:2;:31;6430:6;7916:45;7907:4;7898:6;:13;7897:65;;;;;;11941:14886;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://386ed32aa526e4d140c16534352a5b06e0a13e482f8bd08a73fa6107f882dd06
Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingMultichain Portfolio | 30 Chains
Chain Token Portfolio % Price Amount Value ETH Ether (ETH)84.18% $3,360.12 4.6412 $15,594.87 ETH 8.40% $18.97 82.039 $1,556.28 ETH 4.17% $0.999786 772.1174 $771.95 ETH 1.80% $2.06 161.4452 $332.58 ETH 0.71% $1,529.48 0.0855 $130.82 ETH 0.35% $95,860 0.00068001 $65.19 ETH 0.17% $1 31.4918 $31.49 ETH 0.13% $1.45 16.6142 $24.09 ETH 0.04% $0.989815 8.1961 $8.11 ETH 0.02% $0.044546 83.6102 $3.72 ETH <0.01% $0.255807 5.8778 $1.5 ETH <0.01% $1 0.1352 $0.1352 BSC 0.03% $5.48 1 $5.48 Loading...Loading[ Download: CSV Export ][ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to DirtyBytesArrayToStorage (low-severity), ABIDecodeTwoDimensionalArrayMemory (very low-severity), KeccakCaching (medium-severity), EmptyByteArrayCopy (medium-severity), DynamicArrayCleanup (medium-severity), ImplicitConstructorCallvalueCheck (very low-severity), TupleAssignmentMultiStackSlotComponents (very low-severity), MemoryArrayCreationOverflow (low-severity), privateCanBeOverridden (low-severity), SignedArrayStorageCopy (low/medium-severity), ABIEncoderV2StorageArrayWithMultiSlotElement (low-severity), DynamicConstructorArgumentsClippedABIV2 (very low-severity), UninitializedFunctionPointerInConstructor_0.4.x (very low-severity), IncorrectEventSignatureInLibraries_0.4.x (very low-severity), ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.SignIn
Address Cards
To use this feature, please login to your Etherscan account and return to this page.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.