Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 225 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 23525323 | 26 hrs ago | IN | 0 ETH | 0.00001065 | ||||
Approve | 23520174 | 44 hrs ago | IN | 0 ETH | 0.00012627 | ||||
Approve | 23509247 | 3 days ago | IN | 0 ETH | 0.00000845 | ||||
Approve | 23507192 | 3 days ago | IN | 0 ETH | 0.0000517 | ||||
Transfer | 23507175 | 3 days ago | IN | 0 ETH | 0.00010727 | ||||
Approve | 23493124 | 5 days ago | IN | 0 ETH | 0.00000999 | ||||
Approve | 23492926 | 5 days ago | IN | 0 ETH | 0.00001808 | ||||
Approve | 23492827 | 5 days ago | IN | 0 ETH | 0.00002454 | ||||
Transfer | 23492801 | 5 days ago | IN | 0 ETH | 0.00004055 | ||||
Approve | 23492796 | 5 days ago | IN | 0 ETH | 0.00002984 | ||||
Transfer | 23492791 | 5 days ago | IN | 0 ETH | 0.00023549 | ||||
Withdraw All Tax... | 23492763 | 5 days ago | IN | 0 ETH | 0.00006076 | ||||
Approve | 23492742 | 5 days ago | IN | 0 ETH | 0.00026162 | ||||
Approve | 23492742 | 5 days ago | IN | 0 ETH | 0.00026162 | ||||
Update Sell Fees | 23492741 | 5 days ago | IN | 0 ETH | 0.00005735 | ||||
Approve | 23492741 | 5 days ago | IN | 0 ETH | 0.00026121 | ||||
Approve | 23492733 | 5 days ago | IN | 0 ETH | 0.00025819 | ||||
Approve | 23492717 | 5 days ago | IN | 0 ETH | 0.00025866 | ||||
Approve | 23492717 | 5 days ago | IN | 0 ETH | 0.00025866 | ||||
Approve | 23492716 | 5 days ago | IN | 0 ETH | 0.0000298 | ||||
Approve | 23492714 | 5 days ago | IN | 0 ETH | 0.00001596 | ||||
Approve | 23492713 | 5 days ago | IN | 0 ETH | 0.00001425 | ||||
Approve | 23492713 | 5 days ago | IN | 0 ETH | 0.0000418 | ||||
Approve | 23492704 | 5 days ago | IN | 0 ETH | 0.00002336 | ||||
Approve | 23492704 | 5 days ago | IN | 0 ETH | 0.00002768 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 23525323 | 26 hrs ago | 0.00303728 ETH | ||||
Transfer | 23525323 | 26 hrs ago | 0.01518643 ETH | ||||
Transfer | 23507175 | 3 days ago | 0.00451442 ETH | ||||
Transfer | 23507175 | 3 days ago | 0.02257211 ETH | ||||
Transfer | 23500260 | 4 days ago | 0.00150615 ETH | ||||
Transfer | 23500260 | 4 days ago | 0.00753079 ETH | ||||
Transfer | 23492926 | 5 days ago | 0.00150615 ETH | ||||
Transfer | 23492926 | 5 days ago | 0.00753079 ETH | ||||
Transfer | 23492791 | 5 days ago | 0.00190455 ETH | ||||
Transfer | 23492791 | 5 days ago | 0.00952279 ETH | ||||
Transfer | 23492763 | 5 days ago | 2.41511039 ETH | ||||
Transfer | 23492742 | 5 days ago | 0.00123405 ETH | ||||
Transfer | 23492742 | 5 days ago | 0.00617025 ETH | ||||
Transfer | 23492742 | 5 days ago | 0.00049054 ETH | ||||
Transfer | 23492742 | 5 days ago | 0.00245272 ETH | ||||
Transfer | 23492741 | 5 days ago | 0.00049054 ETH | ||||
Transfer | 23492741 | 5 days ago | 0.00245272 ETH | ||||
Transfer | 23492741 | 5 days ago | 0.0003744 ETH | ||||
Transfer | 23492741 | 5 days ago | 0.00187204 ETH | ||||
Transfer | 23492739 | 5 days ago | 0.00049529 ETH | ||||
Transfer | 23492739 | 5 days ago | 0.00247648 ETH | ||||
Transfer | 23492738 | 5 days ago | 0.00049529 ETH | ||||
Transfer | 23492738 | 5 days ago | 0.00247648 ETH | ||||
Transfer | 23492738 | 5 days ago | 0.00049529 ETH | ||||
Transfer | 23492738 | 5 days ago | 0.00247648 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SPX_STRATEGY
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-10-02 */ // SPDX-License-Identifier: MIT /* _______________________ ___ _________ __ __ / _____/\______ \ \/ / / _____// |_____________ _/ |_ ____ ____ ___.__. \_____ \ | ___/\ / \_____ \\ __\_ __ \__ \\ __\/ __ \ / ___< | | / \ | | / \ / \| | | | \// __ \| | \ ___// /_/ >___ | /_______ / |____| /___/\ \ /_______ /|__| |__| (____ /__| \___ >___ // ____| \/ \_/ \/ \/ \/_____/ \/ Twitter: https://x.com/spxstrategyeth Website: https://www.spxstr.com/ */ // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; } function _nonReentrantAfter() private { _status = _NOT_ENTERED; } function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: main.sol pragma solidity ^0.8.19; library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } pragma solidity ^0.8.0; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.0; interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } pragma solidity ^0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } pragma solidity ^0.8.19; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.30; contract SPX_STRATEGY is ERC20, Ownable, ReentrancyGuard { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapRouter; address public uniswapV2Pair; address constant public SPX_TOKEN = payable(0xE0f63A424a4439cBE457D80E4f4b51aD25b2c56C); address constant public WETH_TOKEN = payable(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); address constant public DEAD_ADDRESS = payable(0x000000000000000000000000000000000000dEaD); uint256 public profitThresholdBps = 1200; struct Order { uint256 ethSpent; uint256 spxBought; uint256 timestamp; bool sold; } uint256 public nextOrderId = 1; mapping(uint256 => Order) public orders; uint256 public minSpxBuy = 5 ether; uint256 public txReward = 0.01 ether; uint256 public maxSlippageBps = 500; // 10% max slippage bool private swapping; address public treasuryWallet; address public teamWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; uint256 public buyTotalFees; uint256 public buyTreasuryFee; uint256 public sellTotalFees; uint256 public sellTreasuryFee; uint256 public tokensForTreasury; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapRouter(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event treasuryWalletUpdated(address indexed newWallet, address indexed oldWallet); constructor() ERC20("SPX Strategy", "SPXSTR") { IUniswapV2Router02 _uniswapRouter = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapRouter), true); uniswapRouter = _uniswapRouter; uint256 _buyTreasuryFee = 25; uint256 _sellTreasuryFee = 25; uint256 totalSupply = 1_000_000_000 * 1e18; maxTransactionAmount = totalSupply / 100; maxWallet = totalSupply / 100; swapTokensAtAmount = (totalSupply * 5) / 10000; buyTreasuryFee = _buyTreasuryFee; buyTotalFees = buyTreasuryFee; sellTreasuryFee = _sellTreasuryFee; sellTotalFees = sellTreasuryFee; treasuryWallet = address(this); teamWallet = msg.sender; excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); _mint(msg.sender, totalSupply); } receive() external payable {} function createPair() external onlyOwner { uniswapV2Pair = IUniswapV2Factory(uniswapRouter.factory()) .createPair(address(this), uniswapRouter.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); } function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { swapTokensAtAmount = newAmount; return true; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees(uint256 _treasuryFee) external onlyOwner { buyTreasuryFee = _treasuryFee; buyTotalFees = buyTreasuryFee; } function updateSellFees(uint256 _treasuryFee) external onlyOwner { sellTreasuryFee = _treasuryFee; sellTotalFees = sellTreasuryFee; } function updateProfitThreshold(uint256 newBps) external onlyOwner { require(newBps >= 1000, "Minimum 0% profit (break-even)"); require(newBps <= 5000, "Maximum 50% profit"); profitThresholdBps = newBps; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer(address from, address to, uint256 amount) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if (from != owner() && to != owner() && to != address(0) && !swapping) { if (!tradingActive) { require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if (!_isExcludedMaxTransactionAmount[to]) { require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if (takeFee) { if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForTreasury += (fees * sellTreasuryFee) / sellTotalFees; } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForTreasury += (fees * buyTreasuryFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapRouter.WETH(); _approve(address(this), address(uniswapRouter), tokenAmount); uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForTreasury; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 amountToSwapForETH = contractBalance; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); tokensForTreasury = 0; uint256 teamShare = ethBalance.mul(20).div(100); if (teamWallet != address(0)) { (success, ) = teamWallet.call{value: teamShare}(""); } } /* SPX functions */ function updateRewards(uint256 val) external onlyOwner { txReward = val; } function updateMinSpxBuy(uint256 val) external onlyOwner { minSpxBuy = val; } function updateMaxSlippage(uint256 bps) external onlyOwner { require(bps <= 1000, "Max 10% slippage"); maxSlippageBps = bps; } function updateTeamWallet(address newWallet) external onlyOwner { require(newWallet != address(0), "Zero address not allowed"); teamWallet = newWallet; } function buySpx() external nonReentrant { uint256 treasuryBalance = address(this).balance; require(treasuryBalance >= minSpxBuy + txReward, "Not enough ETH in treasury"); uint256 ethToSpend = treasuryBalance - txReward; // Calculate minimum amount out with slippage protection address[] memory pathPreview = new address[](2); pathPreview[0] = uniswapRouter.WETH(); pathPreview[1] = SPX_TOKEN; uint[] memory amountsExpected = uniswapRouter.getAmountsOut(ethToSpend, pathPreview); uint256 minAmountOut = amountsExpected[1].mul(10000 - maxSlippageBps).div(10000); uint256 beforeSpxBalance = IERC20(SPX_TOKEN).balanceOf(address(this)); address[] memory path = new address[](2); path[0] = uniswapRouter.WETH(); path[1] = SPX_TOKEN; uniswapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethToSpend}( minAmountOut, // Slippage protection path, address(this), block.timestamp ); uint256 afterSpxBalance = IERC20(SPX_TOKEN).balanceOf(address(this)); uint256 spxBought = afterSpxBalance - beforeSpxBalance; uint256 orderId = nextOrderId++; orders[orderId] = Order({ ethSpent: ethToSpend, spxBought: spxBought, timestamp: block.timestamp, sold: false }); payable(msg.sender).transfer(txReward); } function sellSpx(uint256 orderId) external nonReentrant { Order storage order = orders[orderId]; require(!order.sold, "Already sold"); require(previewSell(order.spxBought) * 1000 >= order.ethSpent * profitThresholdBps, "Profit threshold not met"); require(IERC20(SPX_TOKEN).balanceOf(address(this)) >= order.spxBought, "Not enough SPX in contract"); IERC20(SPX_TOKEN).approve(address(uniswapRouter), order.spxBought); // Calculate minimum ETH out with slippage protection uint256 expectedEth = previewSell(order.spxBought); uint256 minEthOut = expectedEth.mul(10000 - maxSlippageBps).div(10000); address[] memory path = new address[](2); path[0] = SPX_TOKEN; path[1] = uniswapRouter.WETH(); uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( order.spxBought, minEthOut, // Slippage protection path, owner(), block.timestamp ); order.sold = true; payable(msg.sender).transfer(txReward); } function previewSell(uint256 amountIn) public view returns (uint256 ethExpected) { address[] memory path = new address[](2); path[0] = SPX_TOKEN; path[1] = uniswapRouter.WETH(); uint[] memory amounts = uniswapRouter.getAmountsOut(amountIn, path); ethExpected = amounts[1]; } function withdrawETH(uint256 amount) external onlyOwner { require(amount <= address(this).balance, "Insufficient ETH balance"); payable(owner()).transfer(amount); } function withdrawAllTaxETH() external onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No ETH to withdraw"); payable(owner()).transfer(balance); } function stats() public view returns(uint256[] memory) { uint256[] memory data = new uint256[](3); data[0] = IERC20(address(this)).balanceOf(DEAD_ADDRESS); data[1] = address(this).balance; data[2] = IERC20(SPX_TOKEN).balanceOf(address(this)); return data; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"treasuryWalletUpdated","type":"event"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SPX_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buySpx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSlippageBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSpxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOrderId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orders","outputs":[{"internalType":"uint256","name":"ethSpent","type":"uint256"},{"internalType":"uint256","name":"spxBought","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"sold","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"previewSell","outputs":[{"internalType":"uint256","name":"ethExpected","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"profitThresholdBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"sellSpx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stats","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"txReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"updateMaxSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"updateMinSpxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBps","type":"uint256"}],"name":"updateProfitThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"updateRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAllTaxETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526104b060085560016009819055674563918244f40000600b55662386f26fc10000600c556101f4600d556013805462ffffff19169091179055348015610048575f5ffd5b506040518060400160405280600c81526020016b53505820537472617465677960a01b8152506040518060400160405280600681526020016529a82c29aa2960d11b815250816003908161009c91906104c6565b5060046100a982826104c6565b5050506100c26100bd6101de60201b60201c565b6101e2565b60016006819055737a250d5630b4cf539739df2c5dacb4c659f2488d906100ea908290610233565b6001600160a01b0381166080526019806b033b2e3c9fd0803ce8000000610112606482610594565b601055610120606482610594565b6012556127106101318260056105b3565b61013b9190610594565b6011556015839055601483905560178290556016829055600e80546101003002610100600160a81b0319909116179055600f80546001600160a01b031916331790556101996101926005546001600160a01b031690565b60016102a9565b6101a43060016102a9565b6101c06101b96005546001600160a01b031690565b6001610233565b6101cb306001610233565b6101d5338261034e565b505050506105e3565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b0316331461027f5760405162461bcd60e51b815260206004820181905260248201525f516020613ba25f395f51905f5260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146102f05760405162461bcd60e51b815260206004820181905260248201525f516020613ba25f395f51905f526044820152606401610276565b6001600160a01b0382165f81815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166103a45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610276565b8060025f8282546103b591906105d0565b90915550506001600160a01b0382165f90815260208190526040812080548392906103e19084906105d0565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061045757607f821691505b60208210810361047557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561042a57805f5260205f20601f840160051c810160208510156104a05750805b601f840160051c820191505b818110156104bf575f81556001016104ac565b5050505050565b81516001600160401b038111156104df576104df61042f565b6104f3816104ed8454610443565b8461047b565b6020601f821160018114610525575f831561050e5750848201515b5f19600385901b1c1916600184901b1784556104bf565b5f84815260208120601f198516915b828110156105545787850151825560209485019460019092019101610534565b508482101561057157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b5f826105ae57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176105ca576105ca610580565b92915050565b808201808211156105ca576105ca610580565b60805161354561065d5f395f818161074c01528181610da801528181610ecc01528181610f7f0152818161147801528181611570015281816116c3015281816117b901528181611b6801528181611bf701528181612223015281816122db01528181612e4701528181612efe0152612f3a01526135455ff3fe6080604052600436106103a0575f3560e01c80637571336a116101de578063bbc0c74211610108578063dd62ed3e1161009d578063f2fde38b1161006d578063f2fde38b14610ae3578063f896acc714610b02578063f8b45b0514610b21578063fb3dd95f14610b36575f5ffd5b8063dd62ed3e14610a4c578063e2f4560514610a90578063eba4c33314610aa5578063f14210a614610ac4575f5ffd5b8063cc2ffe7c116100d8578063cc2ffe7c146109e2578063d257b34f146109f7578063d80528ae14610a16578063d85ba06314610a37575f5ffd5b8063bbc0c7421461097b578063c024666814610999578063c4aa7395146109b8578063c8c8ebe4146109cd575f5ffd5b806395d89b411161017e578063a85c38ef1161014e578063a85c38ef146108aa578063a9059cbb1461090f578063b1e95e941461092e578063b62496f51461094d575f5ffd5b806395d89b41146108445780639a7a23d6146108585780639e78fb4f14610877578063a457c2d71461088b575f5ffd5b80637e9401c3116101b95780637e9401c3146107d45780638a8c523c146107f45780638da5cb5b14610808578063924de9b714610825575f5ffd5b80637571336a146107825780637900d0be146107a15780637cb332bb146107b5575f5ffd5b806349bd5a5e116102ca5780636b2fb1241161025f578063715018a61161022f578063715018a61461070857806371fc46881461071c578063735de9f71461073b578063751039fc1461076e575f5ffd5b80636b2fb1241461068b5780636dcafe5c146106a05780636ddd1713146106b557806370a08231146106d4575f5ffd5b80634fbee1931161029a5780634fbee1931461060b57806359927044146106425780635c068a8c146106615780636a486a8e14610676575f5ffd5b806349bd5a5e146105aa5780634a62bb65146105c95780634e6fd6c4146105e25780634ebed39a146105f7575f5ffd5b80632dce9ac0116103405780633950935111610310578063395093511461053357806339ef2067146105525780634626402b1461057157806346d6367614610595575f5ffd5b80632dce9ac0146104a5578063313ce567146104ba57806336a92056146104d557806337d277d4146104f4575f5ffd5b80631370fc571161037b5780631370fc571461043257806318160ddd1461045357806323b872dd146104715780632a58b33014610490575f5ffd5b806306fdde03146103ab578063095ea7b3146103d557806310d5de5314610404575f5ffd5b366103a757005b5f5ffd5b3480156103b6575f5ffd5b506103bf610b55565b6040516103cc9190612fb3565b60405180910390f35b3480156103e0575f5ffd5b506103f46103ef366004612ffc565b610be5565b60405190151581526020016103cc565b34801561040f575f5ffd5b506103f461041e366004613026565b601a6020525f908152604090205460ff1681565b34801561043d575f5ffd5b5061045161044c366004613041565b610bfb565b005b34801561045e575f5ffd5b506002545b6040519081526020016103cc565b34801561047c575f5ffd5b506103f461048b366004613058565b61105f565b34801561049b575f5ffd5b5061046360095481565b3480156104b0575f5ffd5b50610463600b5481565b3480156104c5575f5ffd5b50604051601281526020016103cc565b3480156104e0575f5ffd5b506104516104ef366004613041565b611107565b3480156104ff575f5ffd5b5061051b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040516001600160a01b0390911681526020016103cc565b34801561053e575f5ffd5b506103f461054d366004612ffc565b611136565b34801561055d575f5ffd5b5061045161056c366004613041565b611171565b34801561057c575f5ffd5b50600e5461051b9061010090046001600160a01b031681565b3480156105a0575f5ffd5b50610463600c5481565b3480156105b5575f5ffd5b5060075461051b906001600160a01b031681565b3480156105d4575f5ffd5b506013546103f49060ff1681565b3480156105ed575f5ffd5b5061051b61dead81565b348015610602575f5ffd5b50610451611239565b348015610616575f5ffd5b506103f4610625366004613026565b6001600160a01b03165f9081526019602052604090205460ff1690565b34801561064d575f5ffd5b50600f5461051b906001600160a01b031681565b34801561066c575f5ffd5b5061046360155481565b348015610681575f5ffd5b5061046360165481565b348015610696575f5ffd5b5061046360175481565b3480156106ab575f5ffd5b5061046360085481565b3480156106c0575f5ffd5b506013546103f49062010000900460ff1681565b3480156106df575f5ffd5b506104636106ee366004613026565b6001600160a01b03165f9081526020819052604090205490565b348015610713575f5ffd5b506104516112e1565b348015610727575f5ffd5b50610451610736366004613041565b611316565b348015610746575f5ffd5b5061051b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610779575f5ffd5b506103f461134a565b34801561078d575f5ffd5b5061045161079c3660046130a3565b611386565b3480156107ac575f5ffd5b506104516113da565b3480156107c0575f5ffd5b506104516107cf366004613026565b611950565b3480156107df575f5ffd5b5061051b5f5160206134f05f395f51905f5281565b3480156107ff575f5ffd5b506104516119f2565b348015610813575f5ffd5b506005546001600160a01b031661051b565b348015610830575f5ffd5b5061045161083f3660046130da565b611a2f565b34801561084f575f5ffd5b506103bf611a75565b348015610863575f5ffd5b506104516108723660046130a3565b611a84565b348015610882575f5ffd5b50610451611b3c565b348015610896575f5ffd5b506103f46108a5366004612ffc565b611d24565b3480156108b5575f5ffd5b506108ed6108c4366004613041565b600a6020525f908152604090208054600182015460028301546003909301549192909160ff1684565b60408051948552602085019390935291830152151560608201526080016103cc565b34801561091a575f5ffd5b506103f4610929366004612ffc565b611dbc565b348015610939575f5ffd5b50610451610948366004613041565b611dc8565b348015610958575f5ffd5b506103f4610967366004613026565b601b6020525f908152604090205460ff1681565b348015610986575f5ffd5b506013546103f490610100900460ff1681565b3480156109a4575f5ffd5b506104516109b33660046130a3565b611df7565b3480156109c3575f5ffd5b50610463600d5481565b3480156109d8575f5ffd5b5061046360105481565b3480156109ed575f5ffd5b5061046360185481565b348015610a02575f5ffd5b506103f4610a11366004613041565b611e7f565b348015610a21575f5ffd5b50610a2a611eb4565b6040516103cc91906130f5565b348015610a42575f5ffd5b5061046360145481565b348015610a57575f5ffd5b50610463610a66366004613137565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a9b575f5ffd5b5061046360115481565b348015610ab0575f5ffd5b50610451610abf366004613041565b612003565b348015610acf575f5ffd5b50610451610ade366004613041565b612037565b348015610aee575f5ffd5b50610451610afd366004613026565b6120b1565b348015610b0d575f5ffd5b50610451610b1c366004613041565b612149565b348015610b2c575f5ffd5b5061046360125481565b348015610b41575f5ffd5b50610463610b50366004613041565b6121bd565b606060038054610b6490613163565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9090613163565b8015610bdb5780601f10610bb257610100808354040283529160200191610bdb565b820191905f5260205f20905b815481529060010190602001808311610bbe57829003601f168201915b5050505050905090565b5f610bf1338484612379565b5060015b92915050565b610c0361249c565b5f818152600a60205260409020600381015460ff1615610c595760405162461bcd60e51b815260206004820152600c60248201526b105b1c9958591e481cdbdb1960a21b60448201526064015b60405180910390fd5b6008548154610c6891906131af565b610c7582600101546121bd565b610c81906103e86131af565b1015610ccf5760405162461bcd60e51b815260206004820152601860248201527f50726f666974207468726573686f6c64206e6f74206d657400000000000000006044820152606401610c50565b60018101546040516370a0823160e01b81523060048201525f5160206134f05f395f51905f52906370a0823190602401602060405180830381865afa158015610d1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3e91906131c6565b1015610d8c5760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682053505820696e20636f6e74726163740000000000006044820152606401610c50565b600181015460405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260248101919091525f5160206134f05f395f51905f529063095ea7b3906044016020604051808303815f875af1158015610e09573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2d91906131dd565b505f610e3c82600101546121bd565b90505f610e65612710610e5f600d54612710610e5891906131f8565b85906124f5565b90612507565b6040805160028082526060820183529293505f9290916020830190803683370190505090505f5160206134f05f395f51905f52815f81518110610eaa57610eaa61321f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4a9190613233565b81600181518110610f5d57610f5d61321f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac94785600101548484610fc56005546001600160a01b031690565b426040518663ffffffff1660e01b8152600401610fe6959493929190613291565b5f604051808303815f87803b158015610ffd575f5ffd5b505af115801561100f573d5f5f3e3d5ffd5b50505060038501805460ff1916600117905550600c54604051339180156108fc02915f818181858888f1935050505015801561104d573d5f5f3e3d5ffd5b505050505061105c6001600655565b50565b5f61106b848484612512565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156110ef5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c50565b6110fc8533858403612379565b506001949350505050565b6005546001600160a01b031633146111315760405162461bcd60e51b8152600401610c50906132cc565b600b55565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610bf191859061116c908690613301565b612379565b6005546001600160a01b0316331461119b5760405162461bcd60e51b8152600401610c50906132cc565b6103e88110156111ed5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d2030252070726f6669742028627265616b2d6576656e2900006044820152606401610c50565b6113888111156112345760405162461bcd60e51b815260206004820152601260248201527113585e1a5b5d5b480d4c09481c1c9bd99a5d60721b6044820152606401610c50565b600855565b6005546001600160a01b031633146112635760405162461bcd60e51b8152600401610c50906132cc565b47806112a65760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b6044820152606401610c50565b6005546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156112dd573d5f5f3e3d5ffd5b5050565b6005546001600160a01b0316331461130b5760405162461bcd60e51b8152600401610c50906132cc565b6113145f612b0e565b565b6005546001600160a01b031633146113405760405162461bcd60e51b8152600401610c50906132cc565b6015819055601455565b6005545f906001600160a01b031633146113765760405162461bcd60e51b8152600401610c50906132cc565b506013805460ff19169055600190565b6005546001600160a01b031633146113b05760405162461bcd60e51b8152600401610c50906132cc565b6001600160a01b03919091165f908152601a60205260409020805460ff1916911515919091179055565b6113e261249c565b600c54600b5447916113f391613301565b8110156114425760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682045544820696e2074726561737572790000000000006044820152606401610c50565b5f600c548261145191906131f8565b6040805160028082526060820183529293505f9290916020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f69190613233565b815f815181106115085761150861321f565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5160206134f05f395f51905f52816001815181106115495761154961321f565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81525f917f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f906115a79086908690600401613314565b5f60405180830381865afa1580156115c1573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115e89190810190613334565b90505f61162d612710610e5f600d5461271061160491906131f8565b856001815181106116175761161761321f565b60200260200101516124f590919063ffffffff16565b6040516370a0823160e01b81523060048201529091505f905f5160206134f05f395f51905f52906370a0823190602401602060405180830381865afa158015611678573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169c91906131c6565b6040805160028082526060820183529293505f9290916020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117419190613233565b815f815181106117535761175361321f565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5160206134f05f395f51905f52816001815181106117945761179461321f565b6001600160a01b03928316602091820292909201015260405163b6f9de9560e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063b6f9de959088906117f89087908690309042906004016133fc565b5f604051808303818588803b15801561180f575f5ffd5b505af1158015611821573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201525f93505f5160206134f05f395f51905f5292506370a082319150602401602060405180830381865afa15801561186e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189291906131c6565b90505f61189f84836131f8565b600980549192505f9190826118b383613430565b90915550604080516080810182528b81526020808201868152428385019081525f60608501818152878252600a909452858120945185559151600185015551600284015590516003909201805460ff191692151592909217909155600c54915192935033926108fc8315029291818181858888f1935050505015801561193b573d5f5f3e3d5ffd5b50505050505050505050506113146001600655565b6005546001600160a01b0316331461197a5760405162461bcd60e51b8152600401610c50906132cc565b6001600160a01b0381166119d05760405162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f77656400000000000000006044820152606401610c50565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611a1c5760405162461bcd60e51b8152600401610c50906132cc565b6013805462ffff00191662010100179055565b6005546001600160a01b03163314611a595760405162461bcd60e51b8152600401610c50906132cc565b60138054911515620100000262ff000019909216919091179055565b606060048054610b6490613163565b6005546001600160a01b03163314611aae5760405162461bcd60e51b8152600401610c50906132cc565b6007546001600160a01b0390811690831603611b325760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c50565b6112dd8282612b5f565b6005546001600160a01b03163314611b665760405162461bcd60e51b8152600401610c50906132cc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be69190613233565b6001600160a01b031663c9c65396307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c759190613233565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611cbf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce39190613233565b600780546001600160a01b0319166001600160a01b03929092169182179055611d0d906001611386565b600754611314906001600160a01b03166001612b5f565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015611da55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c50565b611db23385858403612379565b5060019392505050565b5f610bf1338484612512565b6005546001600160a01b03163314611df25760405162461bcd60e51b8152600401610c50906132cc565b600c55565b6005546001600160a01b03163314611e215760405162461bcd60e51b8152600401610c50906132cc565b6001600160a01b0382165f81815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005545f906001600160a01b03163314611eab5760405162461bcd60e51b8152600401610c50906132cc565b50601155600190565b604080516003808252608082019092526060915f9190602082018480368337019050506040516370a0823160e01b815261dead600482015290915030906370a0823190602401602060405180830381865afa158015611f15573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3991906131c6565b815f81518110611f4b57611f4b61321f565b6020026020010181815250504781600181518110611f6b57611f6b61321f565b60209081029190910101526040516370a0823160e01b81523060048201525f5160206134f05f395f51905f52906370a0823190602401602060405180830381865afa158015611fbc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe091906131c6565b81600281518110611ff357611ff361321f565b6020908102919091010152919050565b6005546001600160a01b0316331461202d5760405162461bcd60e51b8152600401610c50906132cc565b6017819055601655565b6005546001600160a01b031633146120615760405162461bcd60e51b8152600401610c50906132cc565b478111156112a65760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610c50565b6005546001600160a01b031633146120db5760405162461bcd60e51b8152600401610c50906132cc565b6001600160a01b0381166121405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c50565b61105c81612b0e565b6005546001600160a01b031633146121735760405162461bcd60e51b8152600401610c50906132cc565b6103e88111156121b85760405162461bcd60e51b815260206004820152601060248201526f4d61782031302520736c69707061676560801b6044820152606401610c50565b600d55565b6040805160028082526060820183525f92839291906020830190803683370190505090505f5160206134f05f395f51905f52815f815181106122015761220161321f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561227d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a19190613233565b816001815181106122b4576122b461321f565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81525f917f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f906123129087908690600401613314565b5f60405180830381865afa15801561232c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123539190810190613334565b9050806001815181106123685761236861321f565b602002602001015192505050919050565b6001600160a01b0383166123db5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c50565b6001600160a01b03821661243c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c50565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6002600654036124ee5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c50565b6002600655565b5f61250082846131af565b9392505050565b5f6125008284613448565b6001600160a01b0383166125385760405162461bcd60e51b8152600401610c5090613467565b6001600160a01b03821661255e5760405162461bcd60e51b8152600401610c50906134ac565b805f036125755761257083835f612bb2565b505050565b60135460ff16156128c4576005546001600160a01b038481169116148015906125ac57506005546001600160a01b03838116911614155b80156125c057506001600160a01b03821615155b80156125cf5750600e5460ff16155b156128c457601354610100900460ff16612665576001600160a01b0383165f9081526019602052604090205460ff168061262057506001600160a01b0382165f9081526019602052604090205460ff165b6126655760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c50565b6001600160a01b0383165f908152601b602052604090205460ff1680156126a457506001600160a01b0382165f908152601a602052604090205460ff16155b15612787576010548111156127195760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c50565b6012546001600160a01b0383165f9081526020819052604090205461273e9083613301565b11156127825760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c50565b6128c4565b6001600160a01b0382165f908152601b602052604090205460ff1680156127c657506001600160a01b0383165f908152601a602052604090205460ff16155b1561283c576010548111156127825760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c50565b6001600160a01b0382165f908152601a602052604090205460ff166128c4576012546001600160a01b0383165f908152602081905260409020546128809083613301565b11156128c45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c50565b305f90815260208190526040902054601154811080159081906128ef575060135462010000900460ff165b80156128fe5750600e5460ff16155b801561292257506001600160a01b0385165f908152601b602052604090205460ff16155b801561294657506001600160a01b0385165f9081526019602052604090205460ff16155b801561296a57506001600160a01b0384165f9081526019602052604090205460ff16155b1561298f57600e805460ff19166001179055612984612d05565b600e805460ff191690555b600e546001600160a01b0386165f9081526019602052604090205460ff918216159116806129d457506001600160a01b0385165f9081526019602052604090205460ff165b156129dc57505f5b5f8115612afa576001600160a01b0386165f908152601b602052604090205460ff168015612a0b57505f601654115b15612a6257612a2a6064610e5f601654886124f590919063ffffffff16565b905060165460175482612a3d91906131af565b612a479190613448565b60185f828254612a579190613301565b90915550612adc9050565b6001600160a01b0387165f908152601b602052604090205460ff168015612a8a57505f601454115b15612adc57612aa96064610e5f601454886124f590919063ffffffff16565b905060145460155482612abc91906131af565b612ac69190613448565b60185f828254612ad69190613301565b90915550505b8015612aed57612aed873083612bb2565b612af781866131f8565b94505b612b05878787612bb2565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612bd85760405162461bcd60e51b8152600401610c5090613467565b6001600160a01b038216612bfe5760405162461bcd60e51b8152600401610c50906134ac565b6001600160a01b0383165f9081526020819052604090205481811015612c755760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c50565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612cab908490613301565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cf791815260200190565b60405180910390a350505050565b305f908152602081905260408120546018549091821580612d24575081155b15612d2e57505050565b601154612d3c9060146131af565b831115612d5457601154612d519060146131af565b92505b8247612d5f82612df2565b5f612d6a4783612fa8565b5f6018819055909150612d836064610e5f8460146124f5565b600f549091506001600160a01b031615612b0557600f546040516001600160a01b039091169082905f81818185875af1925050503d805f8114612de1576040519150601f19603f3d011682016040523d82523d5f602084013e612de6565b606091505b50505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612e2557612e2561321f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec59190613233565b81600181518110612ed857612ed861321f565b60200260200101906001600160a01b031690816001600160a01b031681525050612f23307f000000000000000000000000000000000000000000000000000000000000000084612379565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612f779085905f90869030904290600401613291565b5f604051808303815f87803b158015612f8e575f5ffd5b505af1158015612fa0573d5f5f3e3d5ffd5b505050505050565b5f61250082846131f8565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461105c575f5ffd5b5f5f6040838503121561300d575f5ffd5b823561301881612fe8565b946020939093013593505050565b5f60208284031215613036575f5ffd5b813561250081612fe8565b5f60208284031215613051575f5ffd5b5035919050565b5f5f5f6060848603121561306a575f5ffd5b833561307581612fe8565b9250602084013561308581612fe8565b929592945050506040919091013590565b801515811461105c575f5ffd5b5f5f604083850312156130b4575f5ffd5b82356130bf81612fe8565b915060208301356130cf81613096565b809150509250929050565b5f602082840312156130ea575f5ffd5b813561250081613096565b602080825282518282018190525f918401906040840190835b8181101561312c57835183526020938401939092019160010161310e565b509095945050505050565b5f5f60408385031215613148575f5ffd5b823561315381612fe8565b915060208301356130cf81612fe8565b600181811c9082168061317757607f821691505b60208210810361319557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610bf557610bf561319b565b5f602082840312156131d6575f5ffd5b5051919050565b5f602082840312156131ed575f5ffd5b815161250081613096565b81810381811115610bf557610bf561319b565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613243575f5ffd5b815161250081612fe8565b5f8151808452602084019350602083015f5b828110156132875781516001600160a01b0316865260209586019590910190600101613260565b5093949350505050565b85815284602082015260a060408201525f6132af60a083018661324e565b6001600160a01b0394909416606083015250608001529392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b80820180821115610bf557610bf561319b565b828152604060208201525f61332c604083018461324e565b949350505050565b5f60208284031215613344575f5ffd5b815167ffffffffffffffff81111561335a575f5ffd5b8201601f8101841361336a575f5ffd5b805167ffffffffffffffff8111156133845761338461320b565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156133b1576133b161320b565b6040529182526020818401810192908101878411156133ce575f5ffd5b6020850194505b838510156133f1578451808252602095860195909350016133d5565b509695505050505050565b848152608060208201525f613414608083018661324e565b6001600160a01b03949094166040830152506060015292915050565b5f600182016134415761344161319b565b5060010190565b5f8261346257634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b60608201526080019056fe000000000000000000000000e0f63a424a4439cbe457d80e4f4b51ad25b2c56ca264697066735822122001cfeacc1b2fc2987f38b493786ea4e74fed8f0fbc8ff807872fc11cb2bf330164736f6c634300081e00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103a0575f3560e01c80637571336a116101de578063bbc0c74211610108578063dd62ed3e1161009d578063f2fde38b1161006d578063f2fde38b14610ae3578063f896acc714610b02578063f8b45b0514610b21578063fb3dd95f14610b36575f5ffd5b8063dd62ed3e14610a4c578063e2f4560514610a90578063eba4c33314610aa5578063f14210a614610ac4575f5ffd5b8063cc2ffe7c116100d8578063cc2ffe7c146109e2578063d257b34f146109f7578063d80528ae14610a16578063d85ba06314610a37575f5ffd5b8063bbc0c7421461097b578063c024666814610999578063c4aa7395146109b8578063c8c8ebe4146109cd575f5ffd5b806395d89b411161017e578063a85c38ef1161014e578063a85c38ef146108aa578063a9059cbb1461090f578063b1e95e941461092e578063b62496f51461094d575f5ffd5b806395d89b41146108445780639a7a23d6146108585780639e78fb4f14610877578063a457c2d71461088b575f5ffd5b80637e9401c3116101b95780637e9401c3146107d45780638a8c523c146107f45780638da5cb5b14610808578063924de9b714610825575f5ffd5b80637571336a146107825780637900d0be146107a15780637cb332bb146107b5575f5ffd5b806349bd5a5e116102ca5780636b2fb1241161025f578063715018a61161022f578063715018a61461070857806371fc46881461071c578063735de9f71461073b578063751039fc1461076e575f5ffd5b80636b2fb1241461068b5780636dcafe5c146106a05780636ddd1713146106b557806370a08231146106d4575f5ffd5b80634fbee1931161029a5780634fbee1931461060b57806359927044146106425780635c068a8c146106615780636a486a8e14610676575f5ffd5b806349bd5a5e146105aa5780634a62bb65146105c95780634e6fd6c4146105e25780634ebed39a146105f7575f5ffd5b80632dce9ac0116103405780633950935111610310578063395093511461053357806339ef2067146105525780634626402b1461057157806346d6367614610595575f5ffd5b80632dce9ac0146104a5578063313ce567146104ba57806336a92056146104d557806337d277d4146104f4575f5ffd5b80631370fc571161037b5780631370fc571461043257806318160ddd1461045357806323b872dd146104715780632a58b33014610490575f5ffd5b806306fdde03146103ab578063095ea7b3146103d557806310d5de5314610404575f5ffd5b366103a757005b5f5ffd5b3480156103b6575f5ffd5b506103bf610b55565b6040516103cc9190612fb3565b60405180910390f35b3480156103e0575f5ffd5b506103f46103ef366004612ffc565b610be5565b60405190151581526020016103cc565b34801561040f575f5ffd5b506103f461041e366004613026565b601a6020525f908152604090205460ff1681565b34801561043d575f5ffd5b5061045161044c366004613041565b610bfb565b005b34801561045e575f5ffd5b506002545b6040519081526020016103cc565b34801561047c575f5ffd5b506103f461048b366004613058565b61105f565b34801561049b575f5ffd5b5061046360095481565b3480156104b0575f5ffd5b50610463600b5481565b3480156104c5575f5ffd5b50604051601281526020016103cc565b3480156104e0575f5ffd5b506104516104ef366004613041565b611107565b3480156104ff575f5ffd5b5061051b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040516001600160a01b0390911681526020016103cc565b34801561053e575f5ffd5b506103f461054d366004612ffc565b611136565b34801561055d575f5ffd5b5061045161056c366004613041565b611171565b34801561057c575f5ffd5b50600e5461051b9061010090046001600160a01b031681565b3480156105a0575f5ffd5b50610463600c5481565b3480156105b5575f5ffd5b5060075461051b906001600160a01b031681565b3480156105d4575f5ffd5b506013546103f49060ff1681565b3480156105ed575f5ffd5b5061051b61dead81565b348015610602575f5ffd5b50610451611239565b348015610616575f5ffd5b506103f4610625366004613026565b6001600160a01b03165f9081526019602052604090205460ff1690565b34801561064d575f5ffd5b50600f5461051b906001600160a01b031681565b34801561066c575f5ffd5b5061046360155481565b348015610681575f5ffd5b5061046360165481565b348015610696575f5ffd5b5061046360175481565b3480156106ab575f5ffd5b5061046360085481565b3480156106c0575f5ffd5b506013546103f49062010000900460ff1681565b3480156106df575f5ffd5b506104636106ee366004613026565b6001600160a01b03165f9081526020819052604090205490565b348015610713575f5ffd5b506104516112e1565b348015610727575f5ffd5b50610451610736366004613041565b611316565b348015610746575f5ffd5b5061051b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610779575f5ffd5b506103f461134a565b34801561078d575f5ffd5b5061045161079c3660046130a3565b611386565b3480156107ac575f5ffd5b506104516113da565b3480156107c0575f5ffd5b506104516107cf366004613026565b611950565b3480156107df575f5ffd5b5061051b5f5160206134f05f395f51905f5281565b3480156107ff575f5ffd5b506104516119f2565b348015610813575f5ffd5b506005546001600160a01b031661051b565b348015610830575f5ffd5b5061045161083f3660046130da565b611a2f565b34801561084f575f5ffd5b506103bf611a75565b348015610863575f5ffd5b506104516108723660046130a3565b611a84565b348015610882575f5ffd5b50610451611b3c565b348015610896575f5ffd5b506103f46108a5366004612ffc565b611d24565b3480156108b5575f5ffd5b506108ed6108c4366004613041565b600a6020525f908152604090208054600182015460028301546003909301549192909160ff1684565b60408051948552602085019390935291830152151560608201526080016103cc565b34801561091a575f5ffd5b506103f4610929366004612ffc565b611dbc565b348015610939575f5ffd5b50610451610948366004613041565b611dc8565b348015610958575f5ffd5b506103f4610967366004613026565b601b6020525f908152604090205460ff1681565b348015610986575f5ffd5b506013546103f490610100900460ff1681565b3480156109a4575f5ffd5b506104516109b33660046130a3565b611df7565b3480156109c3575f5ffd5b50610463600d5481565b3480156109d8575f5ffd5b5061046360105481565b3480156109ed575f5ffd5b5061046360185481565b348015610a02575f5ffd5b506103f4610a11366004613041565b611e7f565b348015610a21575f5ffd5b50610a2a611eb4565b6040516103cc91906130f5565b348015610a42575f5ffd5b5061046360145481565b348015610a57575f5ffd5b50610463610a66366004613137565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a9b575f5ffd5b5061046360115481565b348015610ab0575f5ffd5b50610451610abf366004613041565b612003565b348015610acf575f5ffd5b50610451610ade366004613041565b612037565b348015610aee575f5ffd5b50610451610afd366004613026565b6120b1565b348015610b0d575f5ffd5b50610451610b1c366004613041565b612149565b348015610b2c575f5ffd5b5061046360125481565b348015610b41575f5ffd5b50610463610b50366004613041565b6121bd565b606060038054610b6490613163565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9090613163565b8015610bdb5780601f10610bb257610100808354040283529160200191610bdb565b820191905f5260205f20905b815481529060010190602001808311610bbe57829003601f168201915b5050505050905090565b5f610bf1338484612379565b5060015b92915050565b610c0361249c565b5f818152600a60205260409020600381015460ff1615610c595760405162461bcd60e51b815260206004820152600c60248201526b105b1c9958591e481cdbdb1960a21b60448201526064015b60405180910390fd5b6008548154610c6891906131af565b610c7582600101546121bd565b610c81906103e86131af565b1015610ccf5760405162461bcd60e51b815260206004820152601860248201527f50726f666974207468726573686f6c64206e6f74206d657400000000000000006044820152606401610c50565b60018101546040516370a0823160e01b81523060048201525f5160206134f05f395f51905f52906370a0823190602401602060405180830381865afa158015610d1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3e91906131c6565b1015610d8c5760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682053505820696e20636f6e74726163740000000000006044820152606401610c50565b600181015460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d16600482015260248101919091525f5160206134f05f395f51905f529063095ea7b3906044016020604051808303815f875af1158015610e09573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2d91906131dd565b505f610e3c82600101546121bd565b90505f610e65612710610e5f600d54612710610e5891906131f8565b85906124f5565b90612507565b6040805160028082526060820183529293505f9290916020830190803683370190505090505f5160206134f05f395f51905f52815f81518110610eaa57610eaa61321f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4a9190613233565b81600181518110610f5d57610f5d61321f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac94785600101548484610fc56005546001600160a01b031690565b426040518663ffffffff1660e01b8152600401610fe6959493929190613291565b5f604051808303815f87803b158015610ffd575f5ffd5b505af115801561100f573d5f5f3e3d5ffd5b50505060038501805460ff1916600117905550600c54604051339180156108fc02915f818181858888f1935050505015801561104d573d5f5f3e3d5ffd5b505050505061105c6001600655565b50565b5f61106b848484612512565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156110ef5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c50565b6110fc8533858403612379565b506001949350505050565b6005546001600160a01b031633146111315760405162461bcd60e51b8152600401610c50906132cc565b600b55565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610bf191859061116c908690613301565b612379565b6005546001600160a01b0316331461119b5760405162461bcd60e51b8152600401610c50906132cc565b6103e88110156111ed5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d2030252070726f6669742028627265616b2d6576656e2900006044820152606401610c50565b6113888111156112345760405162461bcd60e51b815260206004820152601260248201527113585e1a5b5d5b480d4c09481c1c9bd99a5d60721b6044820152606401610c50565b600855565b6005546001600160a01b031633146112635760405162461bcd60e51b8152600401610c50906132cc565b47806112a65760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b6044820152606401610c50565b6005546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156112dd573d5f5f3e3d5ffd5b5050565b6005546001600160a01b0316331461130b5760405162461bcd60e51b8152600401610c50906132cc565b6113145f612b0e565b565b6005546001600160a01b031633146113405760405162461bcd60e51b8152600401610c50906132cc565b6015819055601455565b6005545f906001600160a01b031633146113765760405162461bcd60e51b8152600401610c50906132cc565b506013805460ff19169055600190565b6005546001600160a01b031633146113b05760405162461bcd60e51b8152600401610c50906132cc565b6001600160a01b03919091165f908152601a60205260409020805460ff1916911515919091179055565b6113e261249c565b600c54600b5447916113f391613301565b8110156114425760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682045544820696e2074726561737572790000000000006044820152606401610c50565b5f600c548261145191906131f8565b6040805160028082526060820183529293505f9290916020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f69190613233565b815f815181106115085761150861321f565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5160206134f05f395f51905f52816001815181106115495761154961321f565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81525f917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063d06ca61f906115a79086908690600401613314565b5f60405180830381865afa1580156115c1573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115e89190810190613334565b90505f61162d612710610e5f600d5461271061160491906131f8565b856001815181106116175761161761321f565b60200260200101516124f590919063ffffffff16565b6040516370a0823160e01b81523060048201529091505f905f5160206134f05f395f51905f52906370a0823190602401602060405180830381865afa158015611678573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169c91906131c6565b6040805160028082526060820183529293505f9290916020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117419190613233565b815f815181106117535761175361321f565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5160206134f05f395f51905f52816001815181106117945761179461321f565b6001600160a01b03928316602091820292909201015260405163b6f9de9560e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063b6f9de959088906117f89087908690309042906004016133fc565b5f604051808303818588803b15801561180f575f5ffd5b505af1158015611821573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201525f93505f5160206134f05f395f51905f5292506370a082319150602401602060405180830381865afa15801561186e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189291906131c6565b90505f61189f84836131f8565b600980549192505f9190826118b383613430565b90915550604080516080810182528b81526020808201868152428385019081525f60608501818152878252600a909452858120945185559151600185015551600284015590516003909201805460ff191692151592909217909155600c54915192935033926108fc8315029291818181858888f1935050505015801561193b573d5f5f3e3d5ffd5b50505050505050505050506113146001600655565b6005546001600160a01b0316331461197a5760405162461bcd60e51b8152600401610c50906132cc565b6001600160a01b0381166119d05760405162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f77656400000000000000006044820152606401610c50565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611a1c5760405162461bcd60e51b8152600401610c50906132cc565b6013805462ffff00191662010100179055565b6005546001600160a01b03163314611a595760405162461bcd60e51b8152600401610c50906132cc565b60138054911515620100000262ff000019909216919091179055565b606060048054610b6490613163565b6005546001600160a01b03163314611aae5760405162461bcd60e51b8152600401610c50906132cc565b6007546001600160a01b0390811690831603611b325760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c50565b6112dd8282612b5f565b6005546001600160a01b03163314611b665760405162461bcd60e51b8152600401610c50906132cc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be69190613233565b6001600160a01b031663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c759190613233565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611cbf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce39190613233565b600780546001600160a01b0319166001600160a01b03929092169182179055611d0d906001611386565b600754611314906001600160a01b03166001612b5f565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015611da55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c50565b611db23385858403612379565b5060019392505050565b5f610bf1338484612512565b6005546001600160a01b03163314611df25760405162461bcd60e51b8152600401610c50906132cc565b600c55565b6005546001600160a01b03163314611e215760405162461bcd60e51b8152600401610c50906132cc565b6001600160a01b0382165f81815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005545f906001600160a01b03163314611eab5760405162461bcd60e51b8152600401610c50906132cc565b50601155600190565b604080516003808252608082019092526060915f9190602082018480368337019050506040516370a0823160e01b815261dead600482015290915030906370a0823190602401602060405180830381865afa158015611f15573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3991906131c6565b815f81518110611f4b57611f4b61321f565b6020026020010181815250504781600181518110611f6b57611f6b61321f565b60209081029190910101526040516370a0823160e01b81523060048201525f5160206134f05f395f51905f52906370a0823190602401602060405180830381865afa158015611fbc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe091906131c6565b81600281518110611ff357611ff361321f565b6020908102919091010152919050565b6005546001600160a01b0316331461202d5760405162461bcd60e51b8152600401610c50906132cc565b6017819055601655565b6005546001600160a01b031633146120615760405162461bcd60e51b8152600401610c50906132cc565b478111156112a65760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610c50565b6005546001600160a01b031633146120db5760405162461bcd60e51b8152600401610c50906132cc565b6001600160a01b0381166121405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c50565b61105c81612b0e565b6005546001600160a01b031633146121735760405162461bcd60e51b8152600401610c50906132cc565b6103e88111156121b85760405162461bcd60e51b815260206004820152601060248201526f4d61782031302520736c69707061676560801b6044820152606401610c50565b600d55565b6040805160028082526060820183525f92839291906020830190803683370190505090505f5160206134f05f395f51905f52815f815181106122015761220161321f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561227d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a19190613233565b816001815181106122b4576122b461321f565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81525f917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063d06ca61f906123129087908690600401613314565b5f60405180830381865afa15801561232c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123539190810190613334565b9050806001815181106123685761236861321f565b602002602001015192505050919050565b6001600160a01b0383166123db5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c50565b6001600160a01b03821661243c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c50565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6002600654036124ee5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c50565b6002600655565b5f61250082846131af565b9392505050565b5f6125008284613448565b6001600160a01b0383166125385760405162461bcd60e51b8152600401610c5090613467565b6001600160a01b03821661255e5760405162461bcd60e51b8152600401610c50906134ac565b805f036125755761257083835f612bb2565b505050565b60135460ff16156128c4576005546001600160a01b038481169116148015906125ac57506005546001600160a01b03838116911614155b80156125c057506001600160a01b03821615155b80156125cf5750600e5460ff16155b156128c457601354610100900460ff16612665576001600160a01b0383165f9081526019602052604090205460ff168061262057506001600160a01b0382165f9081526019602052604090205460ff165b6126655760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c50565b6001600160a01b0383165f908152601b602052604090205460ff1680156126a457506001600160a01b0382165f908152601a602052604090205460ff16155b15612787576010548111156127195760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c50565b6012546001600160a01b0383165f9081526020819052604090205461273e9083613301565b11156127825760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c50565b6128c4565b6001600160a01b0382165f908152601b602052604090205460ff1680156127c657506001600160a01b0383165f908152601a602052604090205460ff16155b1561283c576010548111156127825760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c50565b6001600160a01b0382165f908152601a602052604090205460ff166128c4576012546001600160a01b0383165f908152602081905260409020546128809083613301565b11156128c45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c50565b305f90815260208190526040902054601154811080159081906128ef575060135462010000900460ff165b80156128fe5750600e5460ff16155b801561292257506001600160a01b0385165f908152601b602052604090205460ff16155b801561294657506001600160a01b0385165f9081526019602052604090205460ff16155b801561296a57506001600160a01b0384165f9081526019602052604090205460ff16155b1561298f57600e805460ff19166001179055612984612d05565b600e805460ff191690555b600e546001600160a01b0386165f9081526019602052604090205460ff918216159116806129d457506001600160a01b0385165f9081526019602052604090205460ff165b156129dc57505f5b5f8115612afa576001600160a01b0386165f908152601b602052604090205460ff168015612a0b57505f601654115b15612a6257612a2a6064610e5f601654886124f590919063ffffffff16565b905060165460175482612a3d91906131af565b612a479190613448565b60185f828254612a579190613301565b90915550612adc9050565b6001600160a01b0387165f908152601b602052604090205460ff168015612a8a57505f601454115b15612adc57612aa96064610e5f601454886124f590919063ffffffff16565b905060145460155482612abc91906131af565b612ac69190613448565b60185f828254612ad69190613301565b90915550505b8015612aed57612aed873083612bb2565b612af781866131f8565b94505b612b05878787612bb2565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612bd85760405162461bcd60e51b8152600401610c5090613467565b6001600160a01b038216612bfe5760405162461bcd60e51b8152600401610c50906134ac565b6001600160a01b0383165f9081526020819052604090205481811015612c755760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c50565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612cab908490613301565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cf791815260200190565b60405180910390a350505050565b305f908152602081905260408120546018549091821580612d24575081155b15612d2e57505050565b601154612d3c9060146131af565b831115612d5457601154612d519060146131af565b92505b8247612d5f82612df2565b5f612d6a4783612fa8565b5f6018819055909150612d836064610e5f8460146124f5565b600f549091506001600160a01b031615612b0557600f546040516001600160a01b039091169082905f81818185875af1925050503d805f8114612de1576040519150601f19603f3d011682016040523d82523d5f602084013e612de6565b606091505b50505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612e2557612e2561321f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec59190613233565b81600181518110612ed857612ed861321f565b60200260200101906001600160a01b031690816001600160a01b031681525050612f23307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612379565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612f779085905f90869030904290600401613291565b5f604051808303815f87803b158015612f8e575f5ffd5b505af1158015612fa0573d5f5f3e3d5ffd5b505050505050565b5f61250082846131f8565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461105c575f5ffd5b5f5f6040838503121561300d575f5ffd5b823561301881612fe8565b946020939093013593505050565b5f60208284031215613036575f5ffd5b813561250081612fe8565b5f60208284031215613051575f5ffd5b5035919050565b5f5f5f6060848603121561306a575f5ffd5b833561307581612fe8565b9250602084013561308581612fe8565b929592945050506040919091013590565b801515811461105c575f5ffd5b5f5f604083850312156130b4575f5ffd5b82356130bf81612fe8565b915060208301356130cf81613096565b809150509250929050565b5f602082840312156130ea575f5ffd5b813561250081613096565b602080825282518282018190525f918401906040840190835b8181101561312c57835183526020938401939092019160010161310e565b509095945050505050565b5f5f60408385031215613148575f5ffd5b823561315381612fe8565b915060208301356130cf81612fe8565b600181811c9082168061317757607f821691505b60208210810361319557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610bf557610bf561319b565b5f602082840312156131d6575f5ffd5b5051919050565b5f602082840312156131ed575f5ffd5b815161250081613096565b81810381811115610bf557610bf561319b565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613243575f5ffd5b815161250081612fe8565b5f8151808452602084019350602083015f5b828110156132875781516001600160a01b0316865260209586019590910190600101613260565b5093949350505050565b85815284602082015260a060408201525f6132af60a083018661324e565b6001600160a01b0394909416606083015250608001529392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b80820180821115610bf557610bf561319b565b828152604060208201525f61332c604083018461324e565b949350505050565b5f60208284031215613344575f5ffd5b815167ffffffffffffffff81111561335a575f5ffd5b8201601f8101841361336a575f5ffd5b805167ffffffffffffffff8111156133845761338461320b565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156133b1576133b161320b565b6040529182526020818401810192908101878411156133ce575f5ffd5b6020850194505b838510156133f1578451808252602095860195909350016133d5565b509695505050505050565b848152608060208201525f613414608083018661324e565b6001600160a01b03949094166040830152506060015292915050565b5f600182016134415761344161319b565b5060010190565b5f8261346257634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b60608201526080019056fe000000000000000000000000e0f63a424a4439cbe457d80e4f4b51ad25b2c56ca264697066735822122001cfeacc1b2fc2987f38b493786ea4e74fed8f0fbc8ff807872fc11cb2bf330164736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
-----Decoded View---------------
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode Sourcemap
17187:13631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11516:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12430:169;;;;;;;;;;-1:-1:-1;12430:169:0;;;;;:::i;:::-;;:::i;:::-;;;1110:14:1;;1103:22;1085:41;;1073:2;1058:18;12430:169:0;945:187:1;18663:63:0;;;;;;;;;;-1:-1:-1;18663:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28662:1117;;;;;;;;;;-1:-1:-1;28662:1117:0;;;;;:::i;:::-;;:::i;:::-;;11837:108;;;;;;;;;;-1:-1:-1;11925:12:0;;11837:108;;;1766:25:1;;;1754:2;1739:18;11837:108:0;1620:177:1;12607:492:0;;;;;;;;;;-1:-1:-1;12607:492:0;;;;;:::i;:::-;;:::i;17849:30::-;;;;;;;;;;;;;;;;17934:34;;;;;;;;;;;;;;;;11736:93;;;;;;;;;;-1:-1:-1;11736:93:0;;11819:2;2457:36:1;;2445:2;2430:18;11736:93:0;2315:184:1;26673:91:0;;;;;;;;;;-1:-1:-1;26673:91:0;;;;;:::i;:::-;;:::i;17473:88::-;;;;;;;;;;;;17518:42;17473:88;;;;;-1:-1:-1;;;;;2668:32:1;;;2650:51;;2638:2;2623:18;17473:88:0;2504:203:1;13107:215:0;;;;;;;;;;-1:-1:-1;13107:215:0;;;;;:::i;:::-;;:::i;21575:224::-;;;;;;;;;;-1:-1:-1;21575:224:0;;;;;:::i;:::-;;:::i;18112:29::-;;;;;;;;;;-1:-1:-1;18112:29:0;;;;;;;-1:-1:-1;;;;;18112:29:0;;;17975:36;;;;;;;;;;;;;;;;17342:28;;;;;;;;;;-1:-1:-1;17342:28:0;;;;-1:-1:-1;;;;;17342:28:0;;;18297:33;;;;;;;;;;-1:-1:-1;18297:33:0;;;;;;;;17568:90;;;;;;;;;;;;17615:42;17568:90;;30308:192;;;;;;;;;;;;;:::i;22441:126::-;;;;;;;;;;-1:-1:-1;22441:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;22531:28:0;22507:4;22531:28;;;:19;:28;;;;;;;;;22441:126;18148:25;;;;;;;;;;-1:-1:-1;18148:25:0;;;;-1:-1:-1;;;;;18148:25:0;;;18451:29;;;;;;;;;;;;;;;;18489:28;;;;;;;;;;;;;;;;18524:30;;;;;;;;;;;;;;;;17667:40;;;;;;;;;;;;;;;;18377:31;;;;;;;;;;-1:-1:-1;18377:31:0;;;;;;;;;;;11953:127;;;;;;;;;;-1:-1:-1;11953:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12054:18:0;12027:7;12054:18;;;;;;;;;;;;11953:127;16641:103;;;;;;;;;;;;;:::i;21251:152::-;;;;;;;;;;-1:-1:-1;21251:152:0;;;;;:::i;:::-;;:::i;17286:49::-;;;;;;;;;;;;;;;20696:121;;;;;;;;;;;;;:::i;20991:144::-;;;;;;;;;;-1:-1:-1;20991:144:0;;;;;:::i;:::-;;:::i;27113:1541::-;;;;;;;;;;;;;:::i;26929:176::-;;;;;;;;;;-1:-1:-1;26929:176:0;;;;;:::i;:::-;;:::i;17379:87::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17379:87:0;;20576:112;;;;;;;;;;;;;:::i;16418:87::-;;;;;;;;;;-1:-1:-1;16491:6:0;;-1:-1:-1;;;;;16491:6:0;16418:87;;21143:100;;;;;;;;;;-1:-1:-1;21143:100:0;;;;;:::i;:::-;;:::i;11624:104::-;;;;;;;;;;;;;:::i;21997:242::-;;;;;;;;;;-1:-1:-1;21997:242:0;;;;;:::i;:::-;;:::i;20253:315::-;;;;;;;;;;;;;:::i;13330:413::-;;;;;;;;;;-1:-1:-1;13330:413:0;;;;;:::i;:::-;;:::i;17886:39::-;;;;;;;;;;-1:-1:-1;17886:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3927:25:1;;;3983:2;3968:18;;3961:34;;;;4011:18;;;4004:34;4081:14;4074:22;4069:2;4054:18;;4047:50;3914:3;3899:19;17886:39:0;3702:401:1;12088:175:0;;;;;;;;;;-1:-1:-1;12088:175:0;;;;;:::i;:::-;;:::i;26577:88::-;;;;;;;;;;-1:-1:-1;26577:88:0;;;;;:::i;:::-;;:::i;18733:57::-;;;;;;;;;;-1:-1:-1;18733:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18337:33;;;;;;;;;;-1:-1:-1;18337:33:0;;;;;;;;;;;21807:182;;;;;;;;;;-1:-1:-1;21807:182:0;;;;;:::i;:::-;;:::i;18018:35::-;;;;;;;;;;;;;;;;18182;;;;;;;;;;;;;;;;18563:32;;;;;;;;;;;;;;;;20825:158;;;;;;;;;;-1:-1:-1;20825:158:0;;;;;:::i;:::-;;:::i;30508:307::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18417:27::-;;;;;;;;;;;;;;;;12271:151;;;;;;;;;;-1:-1:-1;12271:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;12387:18:0;;;12360:7;12387:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12271:151;18224:33;;;;;;;;;;;;;;;;21411:156;;;;;;;;;;-1:-1:-1;21411:156:0;;;;;:::i;:::-;;:::i;30121:179::-;;;;;;;;;;-1:-1:-1;30121:179:0;;;;;:::i;:::-;;:::i;16752:201::-;;;;;;;;;;-1:-1:-1;16752:201:0;;;;;:::i;:::-;;:::i;26772:149::-;;;;;;;;;;-1:-1:-1;26772:149:0;;;;;:::i;:::-;;:::i;18264:24::-;;;;;;;;;;;;;;;;29787:326;;;;;;;;;;-1:-1:-1;29787:326:0;;;;;:::i;:::-;;:::i;11516:100::-;11570:13;11603:5;11596:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11516:100;:::o;12430:169::-;12513:4;12530:39;10953:10;12553:7;12562:6;12530:8;:39::i;:::-;-1:-1:-1;12587:4:0;12430:169;;;;;:::o;28662:1117::-;6922:21;:19;:21::i;:::-;28729:19:::1;28751:15:::0;;;:6:::1;:15;::::0;;;;28786:10:::1;::::0;::::1;::::0;::::1;;28785:11;28777:36;;;::::0;-1:-1:-1;;;28777:36:0;;5704:2:1;28777:36:0::1;::::0;::::1;5686:21:1::0;5743:2;5723:18;;;5716:30;-1:-1:-1;;;5762:18:1;;;5755:42;5814:18;;28777:36:0::1;;;;;;;;;28888:18;::::0;28871:14;;:35:::1;::::0;28888:18;28871:35:::1;:::i;:::-;28832:28;28844:5;:15;;;28832:11;:28::i;:::-;:35;::::0;28863:4:::1;28832:35;:::i;:::-;:74;;28824:111;;;::::0;-1:-1:-1;;;28824:111:0;;6350:2:1;28824:111:0::1;::::0;::::1;6332:21:1::0;6389:2;6369:18;;;6362:30;6428:26;6408:18;;;6401:54;6472:18;;28824:111:0::1;6148:348:1::0;28824:111:0::1;29000:15;::::0;::::1;::::0;28954:42:::1;::::0;-1:-1:-1;;;28954:42:0;;28990:4:::1;28954:42;::::0;::::1;2650:51:1::0;-1:-1:-1;;;;;;;;;;;17423:42:0;28954:27:::1;::::0;2623:18:1;;28954:42:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;28946:100;;;::::0;-1:-1:-1;;;28946:100:0;;6938:2:1;28946:100:0::1;::::0;::::1;6920:21:1::0;6977:2;6957:18;;;6950:30;7016:28;6996:18;;;6989:56;7062:18;;28946:100:0::1;6736:350:1::0;28946:100:0::1;29109:15;::::0;::::1;::::0;29059:66:::1;::::0;-1:-1:-1;;;29059:66:0;;-1:-1:-1;;;;;29093:13:0::1;7283:32:1::0;29059:66:0::1;::::0;::::1;7265:51:1::0;7332:18;;;7325:34;;;;-1:-1:-1;;;;;;;;;;;17423:42:0;29059:25:::1;::::0;7238:18:1;;29059:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29201:19;29223:28;29235:5;:15;;;29223:11;:28::i;:::-;29201:50;;29262:17;29282:50;29326:5;29282:39;29306:14;;29298:5;:22;;;;:::i;:::-;29282:11:::0;;:15:::1;:39::i;:::-;:43:::0;::::1;:50::i;:::-;29369:16;::::0;;29383:1:::1;29369:16:::0;;;;;::::1;::::0;;29262:70;;-1:-1:-1;29345:21:0::1;::::0;29369:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;29369:16:0::1;29345:40;;-1:-1:-1::0;;;;;;;;;;;29396:4:0::1;29401:1;29396:7;;;;;;;;:::i;:::-;;;;;;:19;-1:-1:-1::0;;;;;29396:19:0::1;;;-1:-1:-1::0;;;;;29396:19:0::1;;;::::0;::::1;29436:13;-1:-1:-1::0;;;;;29436:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29426:4;29431:1;29426:7;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1::0;;;;;29426:30:0::1;;;-1:-1:-1::0;;;;;29426:30:0::1;;;::::0;::::1;29469:13;-1:-1:-1::0;;;;;29469:64:0::1;;29548:5;:15;;;29578:9;29625:4;29644:7;16491:6:::0;;-1:-1:-1;;;;;16491:6:0;;16418:87;29644:7:::1;29666:15;29469:223;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;29705:10:0::1;::::0;::::1;:17:::0;;-1:-1:-1;;29705:17:0::1;29718:4;29705:17;::::0;;-1:-1:-1;29762:8:0::1;::::0;29733:38:::1;::::0;29741:10:::1;::::0;29733:38;::::1;;;::::0;29705:10:::1;29733:38:::0;29705:10;29733:38;29762:8;29741:10;29733:38;::::1;;;;;;;;;;;;;;;;;;;;28718:1061;;;;6966:20:::0;6738:1;7209:7;:22;7160:79;6966:20;28662:1117;:::o;12607:492::-;12747:4;12764:36;12774:6;12782:9;12793:6;12764:9;:36::i;:::-;-1:-1:-1;;;;;12840:19:0;;12813:24;12840:19;;;:11;:19;;;;;;;;10953:10;12840:33;;;;;;;;12892:26;;;;12884:79;;;;-1:-1:-1;;;12884:79:0;;9505:2:1;12884:79:0;;;9487:21:1;9544:2;9524:18;;;9517:30;9583:34;9563:18;;;9556:62;-1:-1:-1;;;9634:18:1;;;9627:38;9682:19;;12884:79:0;9303:404:1;12884:79:0;12999:57;13008:6;10953:10;13049:6;13030:16;:25;12999:8;:57::i;:::-;-1:-1:-1;13087:4:0;;12607:492;-1:-1:-1;;;;12607:492:0:o;26673:91::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;26741:9:::1;:15:::0;26673:91::o;13107:215::-;10953:10;13195:4;13244:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13244:34:0;;;;;;;;;;13195:4;;13212:80;;13235:7;;13244:47;;13281:10;;13244:47;:::i;:::-;13212:8;:80::i;21575:224::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;21666:4:::1;21656:6;:14;;21648:57;;;::::0;-1:-1:-1;;;21648:57:0;;10405:2:1;21648:57:0::1;::::0;::::1;10387:21:1::0;10444:2;10424:18;;;10417:30;10483:32;10463:18;;;10456:60;10533:18;;21648:57:0::1;10203:354:1::0;21648:57:0::1;21730:4;21720:6;:14;;21712:45;;;::::0;-1:-1:-1;;;21712:45:0;;10764:2:1;21712:45:0::1;::::0;::::1;10746:21:1::0;10803:2;10783:18;;;10776:30;-1:-1:-1;;;10822:18:1;;;10815:48;10880:18;;21712:45:0::1;10562:342:1::0;21712:45:0::1;21764:18;:27:::0;21575:224::o;30308:192::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;30381:21:::1;30417:11:::0;30409:42:::1;;;::::0;-1:-1:-1;;;30409:42:0;;11111:2:1;30409:42:0::1;::::0;::::1;11093:21:1::0;11150:2;11130:18;;;11123:30;-1:-1:-1;;;11169:18:1;;;11162:48;11227:18;;30409:42:0::1;10909:342:1::0;30409:42:0::1;16491:6:::0;;30458:34:::1;::::0;-1:-1:-1;;;;;16491:6:0;;;;30458:34;::::1;;;::::0;30484:7;;30458:34:::1;::::0;;;30484:7;16491:6;30458:34;::::1;;;;;;;;;;;;;;;;;;;;30356:144;30308:192::o:0;16641:103::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;16706:30:::1;16733:1;16706:18;:30::i;:::-;16641:103::o:0;21251:152::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;21326:14:::1;:29:::0;;;21366:12:::1;:29:::0;21251:152::o;20696:121::-;16491:6;;20748:4;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;-1:-1:-1;20765:14:0::1;:22:::0;;-1:-1:-1;;20765:22:0::1;::::0;;;20696:121;:::o;20991:144::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21081:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21081:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20991:144::o;27113:1541::-;6922:21;:19;:21::i;:::-;27261:8:::1;::::0;27249:9:::1;::::0;27190:21:::1;::::0;27249:20:::1;::::0;::::1;:::i;:::-;27230:15;:39;;27222:78;;;::::0;-1:-1:-1;;;27222:78:0;;11458:2:1;27222:78:0::1;::::0;::::1;11440:21:1::0;11497:2;11477:18;;;11470:30;11536:28;11516:18;;;11509:56;11582:18;;27222:78:0::1;11256:350:1::0;27222:78:0::1;27313:18;27352:8;;27334:15;:26;;;;:::i;:::-;27478:16;::::0;;27492:1:::1;27478:16:::0;;;;;::::1;::::0;;27313:47;;-1:-1:-1;27447:28:0::1;::::0;27478:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27478:16:0::1;27447:47;;27522:13;-1:-1:-1::0;;;;;27522:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27505:11;27517:1;27505:14;;;;;;;;:::i;:::-;;;;;;:37;-1:-1:-1::0;;;;;27505:37:0::1;;;-1:-1:-1::0;;;;;27505:37:0::1;;;::::0;::::1;-1:-1:-1::0;;;;;;;;;;;27553:11:0::1;27565:1;27553:14;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27553:26:0;;::::1;:14;::::0;;::::1;::::0;;;;;:26;27632:52:::1;::::0;-1:-1:-1;;;27632:52:0;;27600:29:::1;::::0;27632:13:::1;:27;::::0;::::1;::::0;:52:::1;::::0;27660:10;;27672:11;;27632:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;27632:52:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;27600:84;;27695:20;27718:57;27769:5;27718:46;27749:14;;27741:5;:22;;;;:::i;:::-;27718:15;27734:1;27718:18;;;;;;;;:::i;:::-;;;;;;;:22;;:46;;;;:::i;:57::-;27815:42;::::0;-1:-1:-1;;;27815:42:0;;27851:4:::1;27815:42;::::0;::::1;2650:51:1::0;27695:80:0;;-1:-1:-1;27788:24:0::1;::::0;-1:-1:-1;;;;;;;;;;;17423:42:0;27815:27:::1;::::0;2623:18:1;;27815:42:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27892:16;::::0;;27906:1:::1;27892:16:::0;;;;;::::1;::::0;;27788:69;;-1:-1:-1;27868:21:0::1;::::0;27892:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27892:16:0::1;27868:40;;27929:13;-1:-1:-1::0;;;;;27929:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27919:4;27924:1;27919:7;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1::0;;;;;27919:30:0::1;;;-1:-1:-1::0;;;;;27919:30:0::1;;;::::0;::::1;-1:-1:-1::0;;;;;;;;;;;27960:4:0::1;27965:1;27960:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27960:19:0;;::::1;:7;::::0;;::::1;::::0;;;;;:19;27992:221:::1;::::0;-1:-1:-1;;;27992:221:0;;:13:::1;:64:::0;;::::1;::::0;::::1;::::0;28064:10;;27992:221:::1;::::0;28090:12;;28140:4;;28167::::1;::::0;28187:15:::1;::::0;27992:221:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;28260:42:0::1;::::0;-1:-1:-1;;;28260:42:0;;28296:4:::1;28260:42;::::0;::::1;2650:51:1::0;28234:23:0::1;::::0;-1:-1:-1;;;;;;;;;;;;17423:42:0;-1:-1:-1;28260:27:0::1;::::0;-1:-1:-1;2623:18:1;;28260:42:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28234:68:::0;-1:-1:-1;28313:17:0::1;28333:34;28351:16:::0;28234:68;28333:34:::1;:::i;:::-;28398:11;:13:::0;;28313:54;;-1:-1:-1;28380:15:0::1;::::0;28398:13;28380:15;28398:13:::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;28440:155:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;28542:15:::1;28440:155:::0;;;;;;-1:-1:-1;28440:155:0;;;;;;28422:15;;;:6:::1;:15:::0;;;;;;:173;;;;;;28440:155;28422:173;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;28422:173:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;28637:8:::1;::::0;28608:38;;28422:15;;-1:-1:-1;28616:10:0::1;::::0;28608:38:::1;::::0;::::1;;::::0;28637:8;28608:38;-1:-1:-1;28608:38:0;28637:8;28616:10;28608:38;::::1;;;;;;;;;;;;;;;;;;;;27153:1501;;;;;;;;;;6966:20:::0;6738:1;7209:7;:22;7160:79;26929:176;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27012:23:0;::::1;27004:60;;;::::0;-1:-1:-1;;;27004:60:0;;13967:2:1;27004:60:0::1;::::0;::::1;13949:21:1::0;14006:2;13986:18;;;13979:30;14045:26;14025:18;;;14018:54;14089:18;;27004:60:0::1;13765:348:1::0;27004:60:0::1;27075:10;:22:::0;;-1:-1:-1;;;;;;27075:22:0::1;-1:-1:-1::0;;;;;27075:22:0;;;::::1;::::0;;;::::1;::::0;;26929:176::o;20576:112::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;20631:13:::1;:20:::0;;-1:-1:-1;;20662:18:0;;;;;20576:112::o;21143:100::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;21214:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;21214:21:0;;::::1;::::0;;;::::1;::::0;;21143:100::o;11624:104::-;11680:13;11713:7;11706:14;;;;;:::i;21997:242::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;22104:13:::1;::::0;-1:-1:-1;;;;;22104:13:0;;::::1;22096:21:::0;;::::1;::::0;22088:91:::1;;;::::0;-1:-1:-1;;;22088:91:0;;14320:2:1;22088:91:0::1;::::0;::::1;14302:21:1::0;14359:2;14339:18;;;14332:30;14398:34;14378:18;;;14371:62;14469:27;14449:18;;;14442:55;14514:19;;22088:91:0::1;14118:421:1::0;22088:91:0::1;22190:41;22219:4;22225:5;22190:28;:41::i;20253:315::-:0;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;20339:13:::1;-1:-1:-1::0;;;;;20339:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20321:67:0::1;;20397:4;20404:13;-1:-1:-1::0;;;;;20404:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20321:104;::::0;-1:-1:-1;;;;;;20321:104:0::1;::::0;;;;;;-1:-1:-1;;;;;14736:32:1;;;20321:104:0::1;::::0;::::1;14718:51:1::0;14805:32;;14785:18;;;14778:60;14691:18;;20321:104:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20305:13;:120:::0;;-1:-1:-1;;;;;;20305:120:0::1;-1:-1:-1::0;;;;;20305:120:0;;;::::1;::::0;;::::1;::::0;;20436:55:::1;::::0;-1:-1:-1;20436:25:0::1;:55::i;:::-;20539:13;::::0;20502:58:::1;::::0;-1:-1:-1;;;;;20539:13:0::1;::::0;20502:28:::1;:58::i;13330:413::-:0;10953:10;13423:4;13467:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13467:34:0;;;;;;;;;;13520:35;;;;13512:85;;;;-1:-1:-1;;;13512:85:0;;15051:2:1;13512:85:0;;;15033:21:1;15090:2;15070:18;;;15063:30;15129:34;15109:18;;;15102:62;-1:-1:-1;;;15180:18:1;;;15173:35;15225:19;;13512:85:0;14849:401:1;13512:85:0;13633:67;10953:10;13656:7;13684:15;13665:16;:34;13633:8;:67::i;:::-;-1:-1:-1;13731:4:0;;13330:413;-1:-1:-1;;;13330:413:0:o;12088:175::-;12174:4;12191:42;10953:10;12215:9;12226:6;12191:9;:42::i;26577:88::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;26643:8:::1;:14:::0;26577:88::o;21807:182::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21892:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21892:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21947:34;;1085:41:1;;;21947:34:0::1;::::0;1058:18:1;21947:34:0::1;;;;;;;21807:182:::0;;:::o;20825:158::-;16491:6;;20906:4;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;-1:-1:-1;20923:18:0::1;:30:::0;20971:4:::1;::::0;20825:158::o;30508:307::-;30598:16;;;30612:1;30598:16;;;;;;;;;30545;;30574:21;;30598:16;;;;30545;;30598;;;;;-1:-1:-1;;30635:45:0;;-1:-1:-1;;;30635:45:0;;17615:42;30635:45;;;2650:51:1;30574:40:0;;-1:-1:-1;30650:4:0;;30635:31;;2623:18:1;;30635:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30625:4;30630:1;30625:7;;;;;;;;:::i;:::-;;;;;;:55;;;;;30701:21;30691:4;30696:1;30691:7;;;;;;;;:::i;:::-;;;;;;;;;;:31;30743:42;;-1:-1:-1;;;30743:42:0;;30779:4;30743:42;;;2650:51:1;-1:-1:-1;;;;;;;;;;;17423:42:0;30743:27;;2623:18:1;;30743:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30733:4;30738:1;30733:7;;;;;;;;:::i;:::-;;;;;;;;;;:52;30803:4;30508:307;-1:-1:-1;30508:307:0:o;21411:156::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;21487:15:::1;:30:::0;;;21528:13:::1;:31:::0;21411:156::o;30121:179::-;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;30202:21:::1;30192:6;:31;;30184:68;;;::::0;-1:-1:-1;;;30184:68:0;;15457:2:1;30184:68:0::1;::::0;::::1;15439:21:1::0;15496:2;15476:18;;;15469:30;15535:26;15515:18;;;15508:54;15579:18;;30184:68:0::1;15255:348:1::0;16752:201:0;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16841:22:0;::::1;16833:73;;;::::0;-1:-1:-1;;;16833:73:0;;15810:2:1;16833:73:0::1;::::0;::::1;15792:21:1::0;15849:2;15829:18;;;15822:30;15888:34;15868:18;;;15861:62;-1:-1:-1;;;15939:18:1;;;15932:36;15985:19;;16833:73:0::1;15608:402:1::0;16833:73:0::1;16917:28;16936:8;16917:18;:28::i;26772:149::-:0;16491:6;;-1:-1:-1;;;;;16491:6:0;10953:10;16553:23;16545:68;;;;-1:-1:-1;;;16545:68:0;;;;;;;:::i;:::-;26857:4:::1;26850:3;:11;;26842:40;;;::::0;-1:-1:-1;;;26842:40:0;;16217:2:1;26842:40:0::1;::::0;::::1;16199:21:1::0;16256:2;16236:18;;;16229:30;-1:-1:-1;;;16275:18:1;;;16268:46;16331:18;;26842:40:0::1;16015:340:1::0;26842:40:0::1;26893:14;:20:::0;26772:149::o;29787:326::-;29903:16;;;29917:1;29903:16;;;;;;;;29847:19;;;;29903:16;29917:1;29903:16;;;;;;;;;;-1:-1:-1;29903:16:0;29879:40;;-1:-1:-1;;;;;;;;;;;29930:4:0;29935:1;29930:7;;;;;;;;:::i;:::-;;;;;;:19;-1:-1:-1;;;;;29930:19:0;;;-1:-1:-1;;;;;29930:19:0;;;;;29970:13;-1:-1:-1;;;;;29970:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29960:4;29965:1;29960:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29960:30:0;;;:7;;;;;;;;;:30;30027:43;;-1:-1:-1;;;30027:43:0;;30003:21;;30027:13;:27;;;;:43;;30055:8;;30065:4;;30027:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30027:43:0;;;;;;;;;;;;:::i;:::-;30003:67;;30095:7;30103:1;30095:10;;;;;;;;:::i;:::-;;;;;;;30081:24;;29868:245;;29787:326;;;:::o;15498:380::-;-1:-1:-1;;;;;15634:19:0;;15626:68;;;;-1:-1:-1;;;15626:68:0;;16562:2:1;15626:68:0;;;16544:21:1;16601:2;16581:18;;;16574:30;16640:34;16620:18;;;16613:62;-1:-1:-1;;;16691:18:1;;;16684:34;16735:19;;15626:68:0;16360:400:1;15626:68:0;-1:-1:-1;;;;;15713:21:0;;15705:68;;;;-1:-1:-1;;;15705:68:0;;16967:2:1;15705:68:0;;;16949:21:1;17006:2;16986:18;;;16979:30;17045:34;17025:18;;;17018:62;-1:-1:-1;;;17096:18:1;;;17089:32;17138:19;;15705:68:0;16765:398:1;15705:68:0;-1:-1:-1;;;;;15786:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15838:32;;1766:25:1;;;15838:32:0;;1739:18:1;15838:32:0;;;;;;;15498:380;;;:::o;7002:150::-;6782:1;7060:7;;:19;7052:63;;;;-1:-1:-1;;;7052:63:0;;17370:2:1;7052:63:0;;;17352:21:1;17409:2;17389:18;;;17382:30;17448:33;17428:18;;;17421:61;17499:18;;7052:63:0;17168:355:1;7052:63:0;6782:1;7126:7;:18;7002:150::o;8764:98::-;8822:7;8849:5;8853:1;8849;:5;:::i;:::-;8842:12;8764:98;-1:-1:-1;;;8764:98:0:o;8870:::-;8928:7;8955:5;8959:1;8955;:5;:::i;22575:2630::-;-1:-1:-1;;;;;22673:18:0;;22665:68;;;;-1:-1:-1;;;22665:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22752:16:0;;22744:64;;;;-1:-1:-1;;;22744:64:0;;;;;;;:::i;:::-;22825:6;22835:1;22825:11;22821:93;;22853:28;22869:4;22875:2;22879:1;22853:15;:28::i;:::-;22575:2630;;;:::o;22821:93::-;22930:14;;;;22926:1025;;;16491:6;;-1:-1:-1;;;;;22965:15:0;;;16491:6;;22965:15;;;;:32;;-1:-1:-1;16491:6:0;;-1:-1:-1;;;;;22984:13:0;;;16491:6;;22984:13;;22965:32;:52;;;;-1:-1:-1;;;;;;23001:16:0;;;;22965:52;:65;;;;-1:-1:-1;23022:8:0;;;;23021:9;22965:65;22961:979;;;23056:13;;;;;;;23051:150;;-1:-1:-1;;;;;23102:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23131:23:0;;;;;;:19;:23;;;;;;;;23102:52;23094:87;;;;-1:-1:-1;;;23094:87:0;;18762:2:1;23094:87:0;;;18744:21:1;18801:2;18781:18;;;18774:30;-1:-1:-1;;;18820:18:1;;;18813:52;18882:18;;23094:87:0;18560:346:1;23094:87:0;-1:-1:-1;;;;;23225:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;23261:35:0;;;;;;:31;:35;;;;;;;;23260:36;23225:71;23221:704;;;23339:20;;23329:6;:30;;23321:96;;;;-1:-1:-1;;;23321:96:0;;19113:2:1;23321:96:0;;;19095:21:1;19152:2;19132:18;;;19125:30;19191:34;19171:18;;;19164:62;-1:-1:-1;;;19242:18:1;;;19235:51;19303:19;;23321:96:0;18911:417:1;23321:96:0;23474:9;;-1:-1:-1;;;;;12054:18:0;;12027:7;12054:18;;;;;;;;;;;23448:22;;:6;:22;:::i;:::-;:35;;23440:67;;;;-1:-1:-1;;;23440:67:0;;19535:2:1;23440:67:0;;;19517:21:1;19574:2;19554:18;;;19547:30;-1:-1:-1;;;19593:18:1;;;19586:49;19652:18;;23440:67:0;19333:343:1;23440:67:0;23221:704;;;-1:-1:-1;;;;;23554:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23588:37:0;;;;;;:31;:37;;;;;;;;23587:38;23554:71;23550:375;;;23668:20;;23658:6;:30;;23650:97;;;;-1:-1:-1;;;23650:97:0;;19883:2:1;23650:97:0;;;19865:21:1;19922:2;19902:18;;;19895:30;19961:34;19941:18;;;19934:62;-1:-1:-1;;;20012:18:1;;;20005:52;20074:19;;23650:97:0;19681:418:1;23550:375:0;-1:-1:-1;;;;;23778:35:0;;;;;;:31;:35;;;;;;;;23773:152;;23872:9;;-1:-1:-1;;;;;12054:18:0;;12027:7;12054:18;;;;;;;;;;;23846:22;;:6;:22;:::i;:::-;:35;;23838:67;;;;-1:-1:-1;;;23838:67:0;;19535:2:1;23838:67:0;;;19517:21:1;19574:2;19554:18;;;19547:30;-1:-1:-1;;;19593:18:1;;;19586:49;19652:18;;23838:67:0;19333:343:1;23838:67:0;24012:4;23963:28;12054:18;;;;;;;;;;;24068;;24044:42;;;;;;;24103:22;;-1:-1:-1;24114:11:0;;;;;;;24103:22;:35;;;;-1:-1:-1;24130:8:0;;;;24129:9;24103:35;:71;;;;-1:-1:-1;;;;;;24143:31:0;;;;;;:25;:31;;;;;;;;24142:32;24103:71;:115;;;;-1:-1:-1;;;;;;24193:25:0;;;;;;:19;:25;;;;;;;;24192:26;24103:115;:143;;;;-1:-1:-1;;;;;;24223:23:0;;;;;;:19;:23;;;;;;;;24222:24;24103:143;24099:247;;;24263:8;:15;;-1:-1:-1;;24263:15:0;24274:4;24263:15;;;24293:10;:8;:10::i;:::-;24318:8;:16;;-1:-1:-1;;24318:16:0;;;24099:247;24374:8;;-1:-1:-1;;;;;24399:25:0;;24358:12;24399:25;;;:19;:25;;;;;;24374:8;;;;24373:9;;24399:25;;:52;;-1:-1:-1;;;;;;24428:23:0;;;;;;:19;:23;;;;;;;;24399:52;24395:100;;;-1:-1:-1;24478:5:0;24395:100;24507:12;24534:618;;;;-1:-1:-1;;;;;24566:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24615:1;24599:13;;:17;24566:50;24562:441;;;24644:34;24674:3;24644:25;24655:13;;24644:6;:10;;:25;;;;:::i;:34::-;24637:41;;24745:13;;24726:15;;24719:4;:22;;;;:::i;:::-;24718:40;;;;:::i;:::-;24697:17;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;24562:441:0;;-1:-1:-1;24562:441:0;;-1:-1:-1;;;;;24797:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24847:1;24832:12;;:16;24797:51;24793:210;;;24876:33;24905:3;24876:24;24887:12;;24876:6;:10;;:24;;;;:::i;:33::-;24869:40;;24975:12;;24957:14;;24950:4;:21;;;;:::i;:::-;24949:38;;;;:::i;:::-;24928:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24793:210:0;25023:8;;25019:91;;25052:42;25068:4;25082;25089;25052:15;:42::i;:::-;25126:14;25136:4;25126:14;;:::i;:::-;;;24534:618;25164:33;25180:4;25186:2;25190:6;25164:15;:33::i;:::-;22654:2551;;;;22575:2630;;;:::o;16961:191::-;17054:6;;;-1:-1:-1;;;;;17071:17:0;;;-1:-1:-1;;;;;;17071:17:0;;;;;;;17104:40;;17054:6;;;17071:17;17054:6;;17104:40;;17035:16;;17104:40;17024:128;16961:191;:::o;22247:186::-;-1:-1:-1;;;;;22330:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22330:39:0;;;;;;;;;;22385:40;;22330:39;;:31;22385:40;;;22247:186;;:::o;13751:733::-;-1:-1:-1;;;;;13891:20:0;;13883:70;;;;-1:-1:-1;;;13883:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13972:23:0;;13964:71;;;;-1:-1:-1;;;13964:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14132:17:0;;14108:21;14132:17;;;;;;;;;;;14168:23;;;;14160:74;;;;-1:-1:-1;;;14160:74:0;;20306:2:1;14160:74:0;;;20288:21:1;20345:2;20325:18;;;20318:30;20384:34;20364:18;;;20357:62;-1:-1:-1;;;20435:18:1;;;20428:36;20481:19;;14160:74:0;20104:402:1;14160:74:0;-1:-1:-1;;;;;14270:17:0;;;:9;:17;;;;;;;;;;;14290:22;;;14270:42;;14334:20;;;;;;;;:30;;14306:6;;14270:9;14334:30;;14306:6;;14334:30;:::i;:::-;;;;;;;;14399:9;-1:-1:-1;;;;;14382:35:0;14391:6;-1:-1:-1;;;;;14382:35:0;;14410:6;14382:35;;;;1766:25:1;;1754:2;1739:18;;1620:177;14382:35:0;;;;;;;;13872:612;13751:733;;;:::o;25690:852::-;25773:4;25729:23;12054:18;;;;;;;;;;;25818:17;;12054:18;;25875:20;;;:46;;-1:-1:-1;25899:22:0;;25875:46;25871:85;;;25938:7;;;25690:852::o;25871:85::-;25990:18;;:23;;26011:2;25990:23;:::i;:::-;25972:15;:41;25968:115;;;26048:18;;:23;;26069:2;26048:23;:::i;:::-;26030:41;;25968:115;26124:15;26178:21;26210:36;26124:15;26210:16;:36::i;:::-;26257:18;26278:44;:21;26304:17;26278:25;:44::i;:::-;26353:1;26333:17;:21;;;26257:65;;-1:-1:-1;26387:27:0;26410:3;26387:18;26257:65;26402:2;26387:14;:18::i;:27::-;26431:10;;26367:47;;-1:-1:-1;;;;;;26431:10:0;:24;26427:108;;26486:10;;:37;;-1:-1:-1;;;;;26486:10:0;;;;26509:9;;26486:37;;;;26509:9;26486:10;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;25690:852:0:o;25213:469::-;25303:16;;;25317:1;25303:16;;;;;;;;25279:21;;25303:16;;;;;;;;;;-1:-1:-1;25303:16:0;25279:40;;25348:4;25330;25335:1;25330:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25330:23:0;;;-1:-1:-1;;;;;25330:23:0;;;;;25374:13;-1:-1:-1;;;;;25374:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25364:4;25369:1;25364:7;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1;;;;;25364:30:0;;;-1:-1:-1;;;;;25364:30:0;;;;;25407:60;25424:4;25439:13;25455:11;25407:8;:60::i;:::-;25480:194;;-1:-1:-1;;;25480:194:0;;-1:-1:-1;;;;;25480:13:0;:64;;;;:194;;25559:11;;25585:1;;25601:4;;25628;;25648:15;;25480:194;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25268:414;25213:469;:::o;8658:98::-;8716:7;8743:5;8747:1;8743;:5;:::i;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;573:367;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;904:2;889:18;;;;876:32;;-1:-1:-1;;;573:367:1:o;1137:247::-;1196:6;1249:2;1237:9;1228:7;1224:23;1220:32;1217:52;;;1265:1;1262;1255:12;1217:52;1304:9;1291:23;1323:31;1348:5;1323:31;:::i;1389:226::-;1448:6;1501:2;1489:9;1480:7;1476:23;1472:32;1469:52;;;1517:1;1514;1507:12;1469:52;-1:-1:-1;1562:23:1;;1389:226;-1:-1:-1;1389:226:1:o;1802:508::-;1879:6;1887;1895;1948:2;1936:9;1927:7;1923:23;1919:32;1916:52;;;1964:1;1961;1954:12;1916:52;2003:9;1990:23;2022:31;2047:5;2022:31;:::i;:::-;2072:5;-1:-1:-1;2129:2:1;2114:18;;2101:32;2142:33;2101:32;2142:33;:::i;:::-;1802:508;;2194:7;;-1:-1:-1;;;2274:2:1;2259:18;;;;2246:32;;1802:508::o;2946:118::-;3032:5;3025:13;3018:21;3011:5;3008:32;2998:60;;3054:1;3051;3044:12;3069:382;3134:6;3142;3195:2;3183:9;3174:7;3170:23;3166:32;3163:52;;;3211:1;3208;3201:12;3163:52;3250:9;3237:23;3269:31;3294:5;3269:31;:::i;:::-;3319:5;-1:-1:-1;3376:2:1;3361:18;;3348:32;3389:30;3348:32;3389:30;:::i;:::-;3438:7;3428:17;;;3069:382;;;;;:::o;3456:241::-;3512:6;3565:2;3553:9;3544:7;3540:23;3536:32;3533:52;;;3581:1;3578;3571:12;3533:52;3620:9;3607:23;3639:28;3661:5;3639:28;:::i;4108:611::-;4298:2;4310:21;;;4380:13;;4283:18;;;4402:22;;;4250:4;;4481:15;;;4455:2;4440:18;;;4250:4;4524:169;4538:6;4535:1;4532:13;4524:169;;;4599:13;;4587:26;;4642:2;4668:15;;;;4633:12;;;;4560:1;4553:9;4524:169;;;-1:-1:-1;4710:3:1;;4108:611;-1:-1:-1;;;;;4108:611:1:o;4724:388::-;4792:6;4800;4853:2;4841:9;4832:7;4828:23;4824:32;4821:52;;;4869:1;4866;4859:12;4821:52;4908:9;4895:23;4927:31;4952:5;4927:31;:::i;:::-;4977:5;-1:-1:-1;5034:2:1;5019:18;;5006:32;5047:33;5006:32;5047:33;:::i;5117:380::-;5196:1;5192:12;;;;5239;;;5260:61;;5314:4;5306:6;5302:17;5292:27;;5260:61;5367:2;5359:6;5356:14;5336:18;5333:38;5330:161;;5413:10;5408:3;5404:20;5401:1;5394:31;5448:4;5445:1;5438:15;5476:4;5473:1;5466:15;5330:161;;5117:380;;;:::o;5843:127::-;5904:10;5899:3;5895:20;5892:1;5885:31;5935:4;5932:1;5925:15;5959:4;5956:1;5949:15;5975:168;6048:9;;;6079;;6096:15;;;6090:22;;6076:37;6066:71;;6117:18;;:::i;6501:230::-;6571:6;6624:2;6612:9;6603:7;6599:23;6595:32;6592:52;;;6640:1;6637;6630:12;6592:52;-1:-1:-1;6685:16:1;;6501:230;-1:-1:-1;6501:230:1:o;7370:245::-;7437:6;7490:2;7478:9;7469:7;7465:23;7461:32;7458:52;;;7506:1;7503;7496:12;7458:52;7538:9;7532:16;7557:28;7579:5;7557:28;:::i;7620:128::-;7687:9;;;7708:11;;;7705:37;;;7722:18;;:::i;7753:127::-;7814:10;7809:3;7805:20;7802:1;7795:31;7845:4;7842:1;7835:15;7869:4;7866:1;7859:15;7885:127;7946:10;7941:3;7937:20;7934:1;7927:31;7977:4;7974:1;7967:15;8001:4;7998:1;7991:15;8017:251;8087:6;8140:2;8128:9;8119:7;8115:23;8111:32;8108:52;;;8156:1;8153;8146:12;8108:52;8188:9;8182:16;8207:31;8232:5;8207:31;:::i;8273:446::-;8326:3;8364:5;8358:12;8391:6;8386:3;8379:19;8423:4;8418:3;8414:14;8407:21;;8462:4;8455:5;8451:16;8485:1;8495:199;8509:6;8506:1;8503:13;8495:199;;;8574:13;;-1:-1:-1;;;;;8570:39:1;8558:52;;8639:4;8630:14;;;;8667:17;;;;8606:1;8524:9;8495:199;;;-1:-1:-1;8710:3:1;;8273:446;-1:-1:-1;;;;8273:446:1:o;8724:574::-;9015:6;9004:9;8997:25;9058:6;9053:2;9042:9;9038:18;9031:34;9101:3;9096:2;9085:9;9081:18;9074:31;8978:4;9122:57;9174:3;9163:9;9159:19;9151:6;9122:57;:::i;:::-;-1:-1:-1;;;;;9215:32:1;;;;9210:2;9195:18;;9188:60;-1:-1:-1;9279:3:1;9264:19;9257:35;9114:65;8724:574;-1:-1:-1;;;8724:574:1:o;9712:356::-;9914:2;9896:21;;;9933:18;;;9926:30;9992:34;9987:2;9972:18;;9965:62;10059:2;10044:18;;9712:356::o;10073:125::-;10138:9;;;10159:10;;;10156:36;;;10172:18;;:::i;11611:332::-;11818:6;11807:9;11800:25;11861:2;11856;11845:9;11841:18;11834:30;11781:4;11881:56;11933:2;11922:9;11918:18;11910:6;11881:56;:::i;:::-;11873:64;11611:332;-1:-1:-1;;;;11611:332:1:o;11948:1165::-;12043:6;12096:2;12084:9;12075:7;12071:23;12067:32;12064:52;;;12112:1;12109;12102:12;12064:52;12145:9;12139:16;12178:18;12170:6;12167:30;12164:50;;;12210:1;12207;12200:12;12164:50;12233:22;;12286:4;12278:13;;12274:27;-1:-1:-1;12264:55:1;;12315:1;12312;12305:12;12264:55;12348:2;12342:9;12374:18;12366:6;12363:30;12360:56;;;12396:18;;:::i;:::-;12442:6;12439:1;12435:14;12478:2;12472:9;12541:2;12537:7;12532:2;12528;12524:11;12520:25;12512:6;12508:38;12612:6;12600:10;12597:22;12576:18;12564:10;12561:34;12558:62;12555:88;;;12623:18;;:::i;:::-;12659:2;12652:22;12709;;;12759:2;12789:11;;;12785:20;;;12709:22;12747:15;;12817:19;;;12814:39;;;12849:1;12846;12839:12;12814:39;12881:2;12877;12873:11;12862:22;;12893:189;12909:6;12904:3;12901:15;12893:189;;;12999:10;;13022:18;;;13069:2;12926:12;;;;12999:10;;-1:-1:-1;13060:12:1;12893:189;;;-1:-1:-1;13101:6:1;11948:1165;-1:-1:-1;;;;;;11948:1165:1:o;13118:502::-;13381:6;13370:9;13363:25;13424:3;13419:2;13408:9;13404:18;13397:31;13344:4;13445:57;13497:3;13486:9;13482:19;13474:6;13445:57;:::i;:::-;-1:-1:-1;;;;;13538:32:1;;;;13533:2;13518:18;;13511:60;-1:-1:-1;13602:2:1;13587:18;13580:34;13437:65;13118:502;-1:-1:-1;;13118:502:1:o;13625:135::-;13664:3;13685:17;;;13682:43;;13705:18;;:::i;:::-;-1:-1:-1;13752:1:1;13741:13;;13625:135::o;17528:217::-;17568:1;17594;17584:132;;17638:10;17633:3;17629:20;17626:1;17619:31;17673:4;17670:1;17663:15;17701:4;17698:1;17691:15;17584:132;-1:-1:-1;17730:9:1;;17528:217::o;17750:401::-;17952:2;17934:21;;;17991:2;17971:18;;;17964:30;18030:34;18025:2;18010:18;;18003:62;-1:-1:-1;;;18096:2:1;18081:18;;18074:35;18141:3;18126:19;;17750:401::o;18156:399::-;18358:2;18340:21;;;18397:2;18377:18;;;18370:30;18436:34;18431:2;18416:18;;18409:62;-1:-1:-1;;;18502:2:1;18487:18;;18480:33;18545:3;18530:19;;18156:399::o
Swarm Source
ipfs://01cfeacc1b2fc2987f38b493786ea4e74fed8f0fbc8ff807872fc11cb2bf3301
Loading...
Loading
Loading...
Loading

Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $4,483.42 | 0.0317 | $142.13 |
Loading...
Loading
Loading...
Loading
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.