ERC-20
Overview
Max Total Supply
1,000,000 FARM
Holders
6
Total Transfers
-
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
FARMER
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-03-04 */ /** *Submitted for verification at SonicScan.org on 2025-03-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; // OpenZeppelin Contracts v5.0.1 /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, 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); } /** * @dev Contract module that helps prevent reentrant calls to a function. */ abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "R1"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } /** * @dev Contract module which provides a basic access control mechanism */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor(address initialOwner) { if (initialOwner == address(0)) { revert("O1"); } _transferOwnership(initialOwner); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == msg.sender, "O2"); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "O1"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Implementation of the {IERC20} interface. */ contract ERC20 is IERC20 { 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 returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 18; } function totalSupply() public view virtual returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _approve(owner, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) { address spender = msg.sender; _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0) && to != address(0), "E1"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "E2"); unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "E3"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0) && spender != address(0), "E4"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= amount, "E5"); unchecked { _approve(owner, spender, currentAllowance - amount); } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual { // Boş implementasyon } function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual { // Boş implementasyon } } interface IMetropolisRouter { function factory() external pure returns (address); function WETH() external pure returns (address); // Mevcut fonksiyonlar 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 swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); // Yeni eklenen fonksiyonlar 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; function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); // WETH ile ilgili fonksiyonlar function swapExactTokensForWETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactWETHForETH( uint wethAmount, uint amountOutMin, address to, uint deadline ) external returns (uint[] memory amounts); } interface IMetropolisFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } // Pair interface'ini de ekleyelim interface IMetropolisPair { function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; } // SwapProxy interface interface ISwapProxy { function sendETHToFarmer() external; } // FARMER Token Contract contract FARMER is ERC20, ReentrancyGuard, Ownable { // Constants uint256 private constant TOTAL_SUPPLY = 1_000_000 * 10**18; uint256 private constant TAX_RATE = 5; // 5% uint256 private constant LIQUIDITY_TAX = 25; // 2.5% uint256 private constant AIRDROP_TAX = 25; // 2.5% uint256 private constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens minimum for holder status uint256 private constant MIN_TOKENS_FOR_PROCESS = 50 * 10**18; // 50 tokens minimum for processing (azaltıldı) uint256 private constant SWAP_PERCENTAGE = 75; // 75% will be swapped uint256 private constant LIQUIDITY_PERCENTAGE = 25; // 25% will be used for liquidity uint256 private constant MAX_SLIPPAGE = 100; // 100% slippage tolerance (maksimuma çıkarıldı) // Metropolis DEX addresses IMetropolisRouter public metropolisRouter; IMetropolisFactory public metropolisFactory; address public sonicToken; address public liquidityPair; address public treasuryWallet; // Holder tracking mapping(address => bool) public isHolder; address[] public holders; // Events event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount); event AirdropDistributed(uint256 amount, uint256 holdersCount); event SwapFailed(string reason); event ProcessStarted(uint256 tokensForLiquidity, uint256 tokensForAirdrop); event SwapSuccessful(uint256 tokensSwapped, uint256 wethReceived); event TreasuryWalletUpdated(address oldTreasury, address newTreasury); event LiquidityAddFailed(string reason); event AirdropFailed(string reason); event ApprovalRefreshed(address token, address spender, uint256 amount); event WaitingForTreasuryTransfer(uint256 amount); event SwapProxySet(address indexed proxyAddress); event ManualSwapCompleted(uint256 tokenAmount, uint256 ethReceived); event ETHReceived(address indexed sender, uint256 amount); uint256 private _pendingLiquidityTokens; uint256 private _pendingAirdropTokens; bool private _initialized; bool private _inSwap; // Proxy kontrat adresi address public swapProxy; bool public swapProxySet; constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) { address _metropolisRouter = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3; address _metropolisFactory = 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0; address _sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; address _treasuryWallet = 0x95503A306cD81e08c0c43C49FAae71165937d175; require(_metropolisRouter != address(0) && _metropolisFactory != address(0) && _sonicToken != address(0) && _treasuryWallet != address(0), "F1"); metropolisRouter = IMetropolisRouter(_metropolisRouter); metropolisFactory = IMetropolisFactory(_metropolisFactory); sonicToken = _sonicToken; treasuryWallet = _treasuryWallet; _mint(address(this), TOTAL_SUPPLY); } function initialize() external onlyOwner { require(!_initialized, "F2"); _initialized = true; // Try to get existing pair first liquidityPair = metropolisFactory.getPair(address(this), sonicToken); // If pair doesn't exist, create it if (liquidityPair == address(0)) { liquidityPair = metropolisFactory.createPair(address(this), sonicToken); } require(liquidityPair != address(0), "F3"); _approve(address(this), address(metropolisRouter), type(uint256).max); require(IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max), "F4"); IERC20(sonicToken).approve(liquidityPair, type(uint256).max); IERC20(address(this)).approve(liquidityPair, type(uint256).max); } function _transfer( address from, address to, uint256 amount ) internal virtual override { // Vergi işleme mantığı if ( !_inSwap && from != owner() && to != owner() && from != address(this) && to == liquidityPair ) { // Vergi hesapla uint256 taxAmount = amount * TAX_RATE / 100; if (taxAmount > 0) { // Vergiyi likidite ve airdrop için ayır uint256 liquidityTokens = taxAmount * LIQUIDITY_TAX / 100; uint256 airdropTokens = taxAmount * AIRDROP_TAX / 100; // Vergi miktarını ana miktardan düş uint256 transferAmount = amount - taxAmount; // Vergiyi kontrata aktar super._transfer(from, address(this), taxAmount); // Kalan miktarı alıcıya aktar super._transfer(from, to, transferAmount); // Bekleyen miktarları güncelle _pendingLiquidityTokens += liquidityTokens; _pendingAirdropTokens += airdropTokens; // Eğer bekleyen tokenlar belirli bir miktarı aşarsa, işlemi başlat // Büyük satışlarda E5 hatasını önlemek için maksimum işlem miktarını sınırlıyoruz uint256 maxProcessAmount = 100 * 10**18; // Maksimum 100 token işlenecek (daha düşük değer) if (_pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) { // Eğer bekleyen token miktarı çok fazlaysa, sadece bir kısmını işle if (_pendingLiquidityTokens + _pendingAirdropTokens > maxProcessAmount) { // Büyük miktarlar için işlemi başlatma, bir sonraki satışta daha küçük miktarla işlenecek // Bu, E5 hatasını önlemeye yardımcı olur emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens); } else { // Normal işlemi başlat - try/catch bloğunu genişlet try this.processLiquidityAndAirdrop() { // İşlem başarılı } catch Error(string memory reason) { // Hata durumunda event yayınla emit SwapFailed(reason); } catch { // Bilinmeyen hata durumunda event yayınla emit SwapFailed("Unknown error in processLiquidityAndAirdrop"); } } } // Holder durumunu güncelle _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT); _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT); return; } } // Normal transfer super._transfer(from, to, amount); // Holder durumunu güncelle _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT); _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT); } function _updateHolder(address account, bool isHolderStatus) private { if (account != liquidityPair && account != address(this)) { if (isHolderStatus && !isHolder[account]) { isHolder[account] = true; holders.push(account); } else if (!isHolderStatus && isHolder[account]) { isHolder[account] = false; // Remove from holders array for (uint256 i = 0; i < holders.length; i++) { if (holders[i] == account) { holders[i] = holders[holders.length - 1]; holders.pop(); break; } } } } } function processLiquidityAndAirdrop() external nonReentrant { require(!_inSwap, "AP"); _inSwap = true; uint256 tokensForLiquidity = _pendingLiquidityTokens; uint256 tokensForAirdrop = _pendingAirdropTokens; if (tokensForLiquidity == 0 && tokensForAirdrop == 0) { _inSwap = false; return; } // Maksimum işlem miktarını sınırla uint256 maxProcessAmount = 100 * 10**18; // Maksimum 100 token işlenecek (daha düşük değer) uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; // Eğer toplam miktar maksimum miktardan fazlaysa, sadece bir kısmını işle if (totalTokensToSwap > maxProcessAmount) { // Oranları koru uint256 ratio = maxProcessAmount * 1e18 / totalTokensToSwap; tokensForLiquidity = tokensForLiquidity * ratio / 1e18; tokensForAirdrop = tokensForAirdrop * ratio / 1e18; totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; // Bekleyen miktarları güncelle _pendingLiquidityTokens -= tokensForLiquidity; _pendingAirdropTokens -= tokensForAirdrop; } else { // Tüm bekleyen miktarları sıfırla _pendingLiquidityTokens = 0; _pendingAirdropTokens = 0; } emit ProcessStarted(tokensForLiquidity, tokensForAirdrop); // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // Process swap - ETH doğrudan kontrata gelecek uint256 ethReceived = _processSwap(totalTokensToSwap); if (ethReceived == 0) { _inSwap = false; return; } // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { emit SwapFailed("No ETH received from swap"); _inSwap = false; return; } // Gerçek ETH miktarını hesapla uint256 actualEthReceived = contractEthBalance - initialEthBalance; // Calculate amounts uint256 ethForLiquidity = actualEthReceived * tokensForLiquidity / totalTokensToSwap; uint256 ethForAirdrop = actualEthReceived - ethForLiquidity; // ETH ile likidite ekle if (ethForLiquidity > 0) { _addLiquidity(ethForLiquidity, tokensForLiquidity); } // Process airdrop with ETH if (ethForAirdrop > 0) { _processAirdropWithETH(ethForAirdrop); } _inSwap = false; } // Likidite işlemini ayrı bir fonksiyona taşıdık function _processLiquidity(uint256 wethAmount, uint256 tokenAmount) private { // Bu fonksiyon artık kullanılmıyor, kaldırılabilir // Doğrudan _addLiquidity fonksiyonu kullanılıyor } // Likidite ekleme işlemi function _addLiquidity(uint256 ethAmount, uint256 tokenAmount) private { // Daha yüksek slippage toleransı için minimum miktarları düşür uint256 minTokenAmount = tokenAmount * (100 - MAX_SLIPPAGE) / 100; uint256 minEthAmount = ethAmount * (100 - MAX_SLIPPAGE) / 100; try metropolisRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, minTokenAmount, minEthAmount, address(this), block.timestamp + 3600 // Deadline'ı 1 saate çıkardık ) { emit LiquidityAdded(tokenAmount, ethAmount); } catch Error(string memory reason) { emit LiquidityAddFailed(reason); } catch { emit LiquidityAddFailed("E"); } } function _processSwap(uint256 tokenAmount) private returns (uint256) { if (tokenAmount == 0) return 0; require(swapProxySet, "Swap proxy not set"); address[] memory path = new address[](2); path[0] = address(this); path[1] = metropolisRouter.WETH(); // Swap işlemi için minimum çıktı miktarını hesapla // Daha yüksek slippage toleransı için minimum çıktı miktarını 0 olarak ayarlıyoruz uint256 minAmountOut = 0; // Minimum çıktı miktarı 0 olarak ayarlandı // Swap işleminden önce onayları yenile _approve(address(this), address(metropolisRouter), tokenAmount); // Gas limitini artır ve deadline'ı uzat uint256 deadline = block.timestamp + 3600; // 1 saat // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // FARMER -> ETH swap işlemi - FeeOnTransfer fonksiyonu kullanıyoruz try metropolisRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, minAmountOut, path, swapProxy, // ETH'yi proxy kontrata gönder deadline ) { // Swap başarılı oldu, proxy kontratın ETH'yi kontrata göndermesini iste try ISwapProxy(swapProxy).sendETHToFarmer() { // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; uint256 ethReceived = contractEthBalance - initialEthBalance; if (ethReceived > 0) { emit SwapSuccessful(tokenAmount, ethReceived); return ethReceived; } else { emit SwapFailed("No ETH received after proxy transfer"); return 0; } } catch Error(string memory reason) { emit SwapFailed(string(abi.encodePacked("Proxy ETH transfer failed: ", reason))); return 0; } catch { emit SwapFailed("Proxy ETH transfer failed: unknown error"); return 0; } } catch Error(string memory reason) { emit SwapFailed(reason); return 0; } catch { emit SwapFailed("Unknown swap error"); return 0; } } // WETH ile airdrop işlemi function _processAirdropWithETH(uint256 amount) private { uint256 holdersCount = holders.length; if (holdersCount == 0 || amount == 0) return; uint256 amountPerHolder = amount / holdersCount; if (amountPerHolder == 0) return; for (uint256 i = 0; i < holdersCount; i++) { address holder = holders[i]; if (holder != address(0) && holder != address(this) && holder != liquidityPair) { // ETH'yi doğrudan holder'a gönder (bool success, ) = holder.call{value: amountPerHolder}(""); if (!success) { emit AirdropFailed("ETH transfer failed"); } } } emit AirdropDistributed(amount, holdersCount); } // View functions function getHolderCount() external view returns (uint256) { return holders.length; } function getHolders() external view returns (address[] memory) { return holders; } // Initial liquidity function with WSonic function addInitialLiquidityWithWSonic(uint256 tokenAmount, uint256 sonicAmount) external onlyOwner { require(tokenAmount > 0, "NT"); require(sonicAmount > 0, "NS"); require( IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB" ); require( IERC20(sonicToken).balanceOf(msg.sender) >= sonicAmount, "IS" ); // WSonic token'ları kontrata transfer et require( IERC20(sonicToken).transferFrom(msg.sender, address(this), sonicAmount), "TF" ); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); IERC20(sonicToken).approve(address(metropolisRouter), sonicAmount); try metropolisRouter.addLiquidity( address(this), sonicToken, tokenAmount, sonicAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum sonic miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, sonicAmount); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert("FL"); } // Kalan WSonic token'ları geri gönder uint256 remainingWSonic = IERC20(sonicToken).balanceOf(address(this)); if (remainingWSonic > 0) { IERC20(sonicToken).transfer(msg.sender, remainingWSonic); } } // Tüm FARMER tokenlarını ETH ile likiditeye eklemek için fonksiyon function addInitialLiquidityWithAllTokensAndETH() external payable onlyOwner { uint256 tokenAmount = IERC20(address(this)).balanceOf(address(this)); require(tokenAmount > 0, "NT"); require(msg.value > 0, "NE"); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); try metropolisRouter.addLiquidityETH{value: msg.value}( address(this), tokenAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum ETH miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, msg.value); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert("FL"); } } function setRouter(address _router) external onlyOwner { require(_router != address(0), "IR"); metropolisRouter = IMetropolisRouter(_router); } function rescueTokens(address _token, uint256 _amount) external onlyOwner { require(_token != address(this), "CF"); IERC20(_token).transfer(owner(), _amount); } // View functions for pending amounts function getPendingLiquidityTokens() external view returns (uint256) { return _pendingLiquidityTokens; } function getPendingAirdropTokens() external view returns (uint256) { return _pendingAirdropTokens; } // Manual trigger for processing (only owner) function triggerProcessing() external onlyOwner { require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "NP"); require(holders.length > 0, "NH"); try this.processLiquidityAndAirdrop() { // Process successful } catch { emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens); } } // Router için onayları yenile function refreshAllApprovals() external onlyOwner { // Router için onayları yenile _approve(address(this), address(metropolisRouter), type(uint256).max); // Sonic token için onayları yenile try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) { emit ApprovalRefreshed(sonicToken, address(metropolisRouter), type(uint256).max); } catch {} // Likidite çifti için onayları yenile if (liquidityPair != address(0)) { try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) { emit ApprovalRefreshed(sonicToken, liquidityPair, type(uint256).max); } catch {} try IERC20(address(this)).approve(liquidityPair, type(uint256).max) { emit ApprovalRefreshed(address(this), liquidityPair, type(uint256).max); } catch {} } } // Manuel swap işlemi function manualSwap(uint256 tokenAmount) external onlyOwner nonReentrant { require(tokenAmount > 0, "Amount must be greater than 0"); require(tokenAmount <= balanceOf(address(this)), "Insufficient balance"); require(swapProxySet, "Swap proxy not set"); // Swap işlemi uint256 ethReceived = _processSwap(tokenAmount); // Swap sonucunu kontrol et require(ethReceived > 0, "Swap failed, no ETH received"); emit ManualSwapCompleted(tokenAmount, ethReceived); } // Treasury wallet'ı güncelleme fonksiyonu function setTreasuryWallet(address newTreasuryWallet) external onlyOwner { require(newTreasuryWallet != address(0), "ZA"); address oldTreasury = treasuryWallet; treasuryWallet = newTreasuryWallet; emit TreasuryWalletUpdated(oldTreasury, newTreasuryWallet); } // Manuel likidite ve airdrop işlemi function manualLiquidityAndAirdrop(uint256 tokenAmount) external onlyOwner { require(tokenAmount > 0, "NT"); require(IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB"); // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // Swap işlemini gerçekleştir uint256 ethReceived = _processSwap(tokenAmount); if (ethReceived == 0) { return; } // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { emit SwapFailed("No ETH received from swap"); return; } // Gerçek ETH miktarını hesapla uint256 actualEthReceived = contractEthBalance - initialEthBalance; // Calculate amounts uint256 ethForLiquidity = actualEthReceived * LIQUIDITY_TAX / 100; uint256 ethForAirdrop = actualEthReceived * AIRDROP_TAX / 100; // ETH ile likidite ekle if (ethForLiquidity > 0) { _addLiquidity(ethForLiquidity, tokenAmount * LIQUIDITY_TAX / 100); } // Process airdrop with ETH if (ethForAirdrop > 0) { _processAirdropWithETH(ethForAirdrop); } } // Kontratın ETH alabilmesi için receive fonksiyonu receive() external payable { // ETH alındığında event yayınla if (msg.value > 0) { emit ETHReceived(msg.sender, msg.value); } } // Swap proxy adresini ayarla function setSwapProxy(address _swapProxy) external onlyOwner { require(!swapProxySet, "Proxy already set"); require(_swapProxy != address(0), "Invalid proxy address"); swapProxy = _swapProxy; swapProxySet = true; emit SwapProxySet(_swapProxy); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AirdropFailed","type":"event"},{"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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ApprovalRefreshed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ETHReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"LiquidityAddFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"ManualSwapCompleted","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":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"}],"name":"SwapProxySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReceived","type":"uint256"}],"name":"SwapSuccessful","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":false,"internalType":"address","name":"oldTreasury","type":"address"},{"indexed":false,"internalType":"address","name":"newTreasury","type":"address"}],"name":"TreasuryWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WaitingForTreasuryTransfer","type":"event"},{"inputs":[],"name":"addInitialLiquidityWithAllTokensAndETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"addInitialLiquidityWithWSonic","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapProxy","type":"address"}],"name":"setSwapProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapProxySet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5033604051806040016040528060068152602001652320a926a2a960d11b815250604051806040016040528060048152602001634641524d60e01b815250816003908162000060919062000314565b5060046200006f828262000314565b50506001600555506001600160a01b038116620000b85760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064015b60405180910390fd5b620000c38162000171565b50600780547395a7e403d7cf20f675ff9273d66e94d35ba49fa36001600160a01b0319918216811790925560088054731570300e9cfec66c9fb0c8bc14366c86eb170ad090831681179091556009805473039e2fb66102314ce7b64ce5ce3e5183bc94ad389084168117909155600b80547395503a306cd81e08c0c43c49faae71165937d1759416841790559091620001673069d3c21bcecceda1000000620001c3565b5050505062000408565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002005760405162461bcd60e51b8152602060048201526002602482015261453360f01b6044820152606401620000af565b8060026000828254620002149190620003e0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029b57607f821691505b602082108103620002bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026b57600081815260208120601f850160051c81016020861015620002eb5750805b601f850160051c820191505b818110156200030c57828155600101620002f7565b505050505050565b81516001600160401b0381111562000330576200033062000270565b620003488162000341845462000286565b84620002c2565b602080601f831160018114620003805760008415620003675750858301515b600019600386901b1c1916600185901b1785556200030c565b600085815260208120601f198616915b82811015620003b15788860151825594840194600190910190840162000390565b5085821015620003d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200040257634e487b7160e01b600052601160045260246000fd5b92915050565b61386c80620004186000396000f3fe6080604052600436106102135760003560e01c8063808a545711610118578063c0d78655116100a0578063dd62ed3e1161006f578063dd62ed3e14610649578063e3a8fa551461068f578063ed9cacfe14610697578063f2fde38b146106ac578063fd7c9fab146106cc57600080fd5b8063c0d78655146105b9578063c84a705c146105d9578063d4d7b19a146105f9578063d720a2a81461062957600080fd5b8063975b87e8116100e7578063975b87e814610518578063a8602fea14610538578063a9059cbb14610558578063b70143c914610578578063b9276e4b1461059857600080fd5b8063808a5457146104b05780638129fc1c146104d05780638da5cb5b146104e557806395d89b411461050357600080fd5b80634626402b1161019b57806362b6327a1161016a57806362b6327a1461040a5780636ec4be901461042a57806370a08231146104505780637136982b146104865780637ac84fc11461049b57600080fd5b80634626402b1461039357806357376198146103b35780635d76b04c146103d35780635fe8e7cc146103e857600080fd5b806323b872dd116101e257806323b872dd146102ea5780632a11ced01461030a578063313ce56714610342578063397883d21461035e578063461a3a951461037357600080fd5b806306fdde031461025b57806308dee2b414610286578063095ea7b3146102a557806318160ddd146102d557600080fd5b366102565734156102545760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b34801561026757600080fd5b506102706106ec565b60405161027d9190613302565b60405180910390f35b34801561029257600080fd5b50600e545b60405190815260200161027d565b3480156102b157600080fd5b506102c56102c036600461334a565b61077e565b604051901515815260200161027d565b3480156102e157600080fd5b50600254610297565b3480156102f657600080fd5b506102c5610305366004613376565b610798565b34801561031657600080fd5b5061032a6103253660046133b7565b6107bc565b6040516001600160a01b03909116815260200161027d565b34801561034e57600080fd5b506040516012815260200161027d565b34801561036a57600080fd5b506102546107e6565b34801561037f57600080fd5b5060095461032a906001600160a01b031681565b34801561039f57600080fd5b50600b5461032a906001600160a01b031681565b3480156103bf57600080fd5b506102546103ce36600461334a565b610904565b3480156103df57600080fd5b50600f54610297565b3480156103f457600080fd5b506103fd6109d0565b60405161027d9190613414565b34801561041657600080fd5b5060075461032a906001600160a01b031681565b34801561043657600080fd5b5060105461032a906201000090046001600160a01b031681565b34801561045c57600080fd5b5061029761046b36600461342e565b6001600160a01b031660009081526020819052604090205490565b34801561049257600080fd5b50600d54610297565b3480156104a757600080fd5b50610254610a31565b3480156104bc57600080fd5b50600a5461032a906001600160a01b031681565b3480156104dc57600080fd5b50610254610d11565b3480156104f157600080fd5b506006546001600160a01b031661032a565b34801561050f57600080fd5b50610270611087565b34801561052457600080fd5b5061025461053336600461344b565b611096565b34801561054457600080fd5b5061025461055336600461342e565b6117d9565b34801561056457600080fd5b506102c561057336600461334a565b61187d565b34801561058457600080fd5b506102546105933660046133b7565b61188b565b3480156105a457600080fd5b506010546102c590600160b01b900460ff1681565b3480156105c557600080fd5b506102546105d436600461342e565b611a5f565b3480156105e557600080fd5b506102546105f436600461342e565b611ac4565b34801561060557600080fd5b506102c561061436600461342e565b600c6020526000908152604090205460ff1681565b34801561063557600080fd5b506102546106443660046133b7565b611bcd565b34801561065557600080fd5b5061029761066436600461346d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610254611d9f565b3480156106a357600080fd5b50610254611fed565b3480156106b857600080fd5b506102546106c736600461342e565b612266565b3480156106d857600080fd5b5060085461032a906001600160a01b031681565b6060600380546106fb906134a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610727906134a6565b80156107745780601f1061074957610100808354040283529160200191610774565b820191906000526020600020905b81548152906001019060200180831161075757829003601f168201915b5050505050905090565b60003361078c8185856122b2565b60019150505b92915050565b6000336107a6858285612364565b6107b18585856123cc565b506001949350505050565b600d81815481106107cc57600080fd5b6000918252602090912001546001600160a01b0316905081565b6107ee61274a565b6000600e54118061080157506000600f54115b6108375760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d5461086b5760405162461bcd60e51b815260206004820152600260248201526109c960f31b604482015260640161082e565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108a657600080fd5b505af19250505080156108b7575060015b610902577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f546040516108f9929190918252602082015260400190565b60405180910390a15b565b61090c61274a565b306001600160a01b038316036109495760405162461bcd60e51b815260206004820152600260248201526121a360f11b604482015260640161082e565b816001600160a01b031663a9059cbb61096a6006546001600160a01b031690565b836040518363ffffffff1660e01b81526004016109889291906134e0565b6020604051808303816000875af11580156109a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cb91906134f9565b505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561077457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a0a575050505050905090565b600260055403610a685760405162461bcd60e51b8152602060048201526002602482015261523160f01b604482015260640161082e565b6002600555601054610100900460ff1615610aaa5760405162461bcd60e51b8152602060048201526002602482015261041560f41b604482015260640161082e565b6010805461ff001916610100179055600e54600f5481158015610acb575080155b15610ae25750506010805461ff0019169055610d0a565b68056bc75e2d631000006000610af88385613531565b905081811115610ba457600081610b1784670de0b6b3a7640000613544565b610b21919061355b565b9050670de0b6b3a7640000610b368287613544565b610b40919061355b565b9450670de0b6b3a7640000610b558286613544565b610b5f919061355b565b9350610b6b8486613531565b915084600e6000828254610b7f919061357d565b9250508190555083600f6000828254610b98919061357d565b90915550610baf915050565b6000600e819055600f555b60408051858152602081018590527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a1600754610c029030906001600160a01b03166000196122b2565b476000610c0e83612798565b905080600003610c2f5750506010805461ff001916905550610d0a92505050565b47828111610ca057600080516020613817833981519152604051610c809060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150506010805461ff001916905550610d0a9350505050565b6000610cac848361357d565b9050600085610cbb8a84613544565b610cc5919061355b565b90506000610cd3828461357d565b90508115610ce557610ce5828b612c0c565b8015610cf457610cf481612dc7565b50506010805461ff001916905550505050505050505b6001600555565b610d1961274a565b60105460ff1615610d515760405162461bcd60e51b8152602060048201526002602482015261231960f11b604482015260640161082e565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd49190613590565b600a80546001600160a01b0319166001600160a01b03929092169182179055610e90576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6f9190613590565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b0316610ecd5760405162461bcd60e51b8152602060048201526002602482015261463360f01b604482015260640161082e565b600754610ee79030906001600160a01b03166000196122b2565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610f1f92911690600019906004016134e0565b6020604051808303816000875af1158015610f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6291906134f9565b610f935760405162461bcd60e51b8152602060048201526002602482015261118d60f21b604482015260640161082e565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610fcb92911690600019906004016134e0565b6020604051808303816000875af1158015610fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100e91906134f9565b50600a5460405163095ea7b360e01b8152309163095ea7b391611041916001600160a01b031690600019906004016134e0565b6020604051808303816000875af1158015611060573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108491906134f9565b50565b6060600480546106fb906134a6565b61109e61274a565b600082116110be5760405162461bcd60e51b815260040161082e906135ad565b600081116110f35760405162461bcd60e51b81526020600482015260026024820152614e5360f01b604482015260640161082e565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115491906135c9565b10156111875760405162461bcd60e51b815260206004820152600260248201526124a160f11b604482015260640161082e565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156111cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f391906135c9565b10156112265760405162461bcd60e51b8152602060048201526002602482015261495360f01b604482015260640161082e565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061125a903390309086906004016135e2565b6020604051808303816000875af1158015611279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129d91906134f9565b6112ce5760405162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015260640161082e565b6007546112e69030906001600160a01b0316846122b2565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261131c9291169085906004016134e0565b6020604051808303816000875af115801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f91906134f9565b506007546009546001600160a01b039182169163e8e337009130911685856000803361138d42610258613531565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1925050508015611425575060408051601f3d908101601f1916820190925261142291810190613606565b60015b6116ad57611431613634565b806308c379a003611574575061144561368b565b806114505750611576565b6007546114699030906001600160a01b031660006122b2565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926114a0929116906000906004016134e0565b6020604051808303816000875af11580156114bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e391906134f9565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061151690339086906004016134e0565b6020604051808303816000875af1158015611535573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155991906134f9565b508060405162461bcd60e51b815260040161082e9190613302565b505b60075461158f9030906001600160a01b031660006122b2565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926115c6929116906000906004016134e0565b6020604051808303816000875af11580156115e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160991906134f9565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061163c90339085906004016134e0565b6020604051808303816000875af115801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f91906134f9565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b604482015260640161082e565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175691906135c9565b905080156109cb5760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061179090339085906004016134e0565b6020604051808303816000875af11580156117af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d391906134f9565b50505050565b6117e161274a565b6001600160a01b03811661181c5760405162461bcd60e51b81526020600482015260026024820152615a4160f01b604482015260640161082e565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b60003361078c8185856123cc565b61189361274a565b6002600554036118ca5760405162461bcd60e51b8152602060048201526002602482015261523160f01b604482015260640161082e565b60026005558061191c5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e2030000000604482015260640161082e565b306000908152602081905260409020548111156119725760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161082e565b601054600160b01b900460ff166119c05760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b604482015260640161082e565b60006119cb82612798565b905060008111611a1d5760405162461bcd60e51b815260206004820152601c60248201527f53776170206661696c65642c206e6f2045544820726563656976656400000000604482015260640161082e565b60408051838152602081018390527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a150506001600555565b611a6761274a565b6001600160a01b038116611aa25760405162461bcd60e51b815260206004820152600260248201526124a960f11b604482015260640161082e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611acc61274a565b601054600160b01b900460ff1615611b1a5760405162461bcd60e51b8152602060048201526011602482015270141c9bde1e48185b1c9958591e481cd95d607a1b604482015260640161082e565b6001600160a01b038116611b685760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642070726f7879206164647265737360581b604482015260640161082e565b6010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b611bd561274a565b60008111611bf55760405162461bcd60e51b815260040161082e906135ad565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015611c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5691906135c9565b1015611c895760405162461bcd60e51b815260206004820152600260248201526124a160f11b604482015260640161082e565b600754611ca39030906001600160a01b03166000196122b2565b476000611caf83612798565b905080600003611cbe57505050565b47828111611d1d57600080516020613817833981519152604051611d0f9060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150505050565b6000611d29848361357d565b905060006064611d3a601984613544565b611d44919061355b565b905060006064611d55601985613544565b611d5f919061355b565b90508115611d8757611d87826064611d7860198b613544565b611d82919061355b565b612c0c565b8015611d9657611d9681612dc7565b50505050505050565b611da761274a565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015611de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0991906135c9565b905060008111611e2b5760405162461bcd60e51b815260040161082e906135ad565b60003411611e605760405162461bcd60e51b81526020600482015260026024820152614e4560f01b604482015260640161082e565b600754611e789030906001600160a01b0316836122b2565b6007546001600160a01b031663f305d71934308460008033611e9c42610258613531565b6040518863ffffffff1660e01b8152600401611ebd96959493929190613715565b60606040518083038185885af193505050508015611ef8575060408051601f3d908101601f19168201909252611ef591810190613606565b60015b611faf57611f04613634565b806308c379a003611f685750611f1861368b565b80611f235750611f6a565b600754611f3c9030906001600160a01b031660006122b2565b60405133904780156108fc02916000818181858888f19350505050158015611559573d6000803e3d6000fd5b505b600754611f839030906001600160a01b031660006122b2565b60405133904780156108fc02916000818181858888f1935050505015801561167f573d6000803e3d6000fd5b5050604080518381523460208201527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a150565b611ff561274a565b60075461200f9030906001600160a01b03166000196122b2565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261204792911690600019906004016134e0565b6020604051808303816000875af1925050508015612082575060408051601f3d908101601f1916820190925261207f918101906134f9565b60015b156120d857506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926120cf926001600160a01b0391821692911690600019906135e2565b60405180910390a15b600a546001600160a01b03161561090257600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261212192911690600019906004016134e0565b6020604051808303816000875af192505050801561215c575060408051601f3d908101601f19168201909252612159918101906134f9565b60015b156121b25750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926121a9926001600160a01b0391821692911690600019906135e2565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b3916121e4916001600160a01b031690600019906004016134e0565b6020604051808303816000875af192505050801561221f575060408051601f3d908101601f1916820190925261221c918101906134f9565b60015b156109025750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca916108f99130916001600160a01b031690600019906135e2565b61226e61274a565b6001600160a01b0381166122a95760405162461bcd60e51b81526020600482015260026024820152614f3160f01b604482015260640161082e565b61108481612f74565b6001600160a01b038316158015906122d257506001600160a01b03821615155b6123035760405162461bcd60e51b8152602060048201526002602482015261114d60f21b604482015260640161082e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054818110156123bf5760405162461bcd60e51b8152602060048201526002602482015261453560f01b604482015260640161082e565b6117d384848484036122b2565b601054610100900460ff161580156123f257506006546001600160a01b03848116911614155b801561240c57506006546001600160a01b03838116911614155b801561242157506001600160a01b0383163014155b801561243a5750600a546001600160a01b038381169116145b156126e7576000606461244e600584613544565b612458919061355b565b905080156126e5576000606461246f601984613544565b612479919061355b565b90506000606461248a601985613544565b612494919061355b565b905060006124a2848661357d565b90506124af873086612fc6565b6124ba878783612fc6565b82600e60008282546124cc9190613531565b9250508190555081600f60008282546124e59190613531565b9091555050600f54600e5468056bc75e2d63100000916802b5e3af16b1880000916125109190613531565b1061267c5780600f54600e546125269190613531565b1115612577577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f5460405161256a929190918252602082015260400190565b60405180910390a161267c565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156125b257600080fd5b505af19250505080156125c3575060015b61267c576125cf613634565b806308c379a00361261957506125e361368b565b806125ee575061261b565b6000805160206138178339815191528160405161260b9190613302565b60405180910390a15061267c565b505b60008051602061381783398151915260405161256a906020808252602b908201527f556e6b6e6f776e206572726f7220696e2070726f636573734c6971756964697460408201526a079416e6441697264726f760ac1b606082015260800190565b6126af88678ac7230489e800006126a88b6001600160a01b031660009081526020819052604090205490565b10156130cb565b6126db87678ac7230489e800006126a88a6001600160a01b031660009081526020819052604090205490565b5050505050505050565b505b6126f2838383612fc6565b61271e83678ac7230489e800006126a8866001600160a01b031660009081526020819052604090205490565b6109cb82678ac7230489e800006126a8856001600160a01b031660009081526020819052604090205490565b3361275d6006546001600160a01b031690565b6001600160a01b0316146109025760405162461bcd60e51b8152602060048201526002602482015261279960f11b604482015260640161082e565b6000816000036127aa57506000919050565b601054600160b01b900460ff166127f85760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b604482015260640161082e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061282d5761282d613750565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128aa9190613590565b816001815181106128bd576128bd613750565b6001600160a01b0392831660209182029290920101526007546000916128e691309116866122b2565b60006128f442610e10613531565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac9479261293d928b9289928b9262010000909104909116908990600401613766565b600060405180830381600087803b15801561295757600080fd5b505af1925050508015612968575060015b612a1d57612974613634565b806308c379a0036129c5575061298861368b565b8061299357506129c7565b600080516020613817833981519152816040516129b09190613302565b60405180910390a15060009695505050505050565b505b600080516020613817833981519152604051612a09906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b60405180910390a150600095945050505050565b601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a6d57600080fd5b505af1925050508015612a7e575060015b612b4357612a8a613634565b806308c379a003612ae35750612a9e61368b565b80612aa95750612ae5565b60008051602061381783398151915281604051602001612ac991906137a2565b60408051601f19818403018152908290526129b091613302565b505b600080516020613817833981519152604051612a099060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b476000612b50838361357d565b90508015612b9c5760408051898152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1979650505050505050565b600080516020613817833981519152604051612bf69060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a1506000979650505050505050565b60006064612c1a818061357d565b612c249084613544565b612c2e919061355b565b905060006064612c3e818061357d565b612c489086613544565b612c52919061355b565b6007549091506001600160a01b031663f305d719853086868683612c7842610e10613531565b6040518863ffffffff1660e01b8152600401612c9996959493929190613715565b60606040518083038185885af193505050508015612cd4575060408051601f3d908101601f19168201909252612cd191810190613606565b60015b612d8e57612ce0613634565b806308c379a003612d3c5750612cf461368b565b80612cff5750612d3e565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad81604051612d2e9190613302565b60405180910390a1506117d3565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad604051612d81906020808252600190820152604560f81b604082015260600190565b60405180910390a16117d3565b505060408051858152602081018790527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b925001611d0f565b600d54801580612dd5575081155b15612dde575050565b6000612dea828461355b565b905080600003612df957505050565b60005b82811015612f35576000600d8281548110612e1957612e19613750565b6000918252602090912001546001600160a01b031690508015801590612e4857506001600160a01b0381163014155b8015612e625750600a546001600160a01b03828116911614155b15612f22576000816001600160a01b03168460405160006040518083038185875af1925050503d8060008114612eb4576040519150601f19603f3d011682016040523d82523d6000602084013e612eb9565b606091505b5050905080612f20577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051612f1790602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b505b5080612f2d816137e7565b915050612dfc565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c217910160405180910390a1505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831615801590612fe657506001600160a01b03821615155b6130175760405162461bcd60e51b8152602060048201526002602482015261453160f01b604482015260640161082e565b6001600160a01b038316600090815260208190526040902054818110156130655760405162461bcd60e51b8152602060048201526002602482015261229960f11b604482015260640161082e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36117d3565b600a546001600160a01b038381169116148015906130f257506001600160a01b0382163014155b156132da5780801561311d57506001600160a01b0382166000908152600c602052604090205460ff16155b1561318957506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b801580156131af57506001600160a01b0382166000908152600c602052604090205460ff165b156132da576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d548110156109cb57826001600160a01b0316600d82815481106131fc576131fc613750565b6000918252602090912001546001600160a01b0316036132c857600d80546132269060019061357d565b8154811061323657613236613750565b600091825260209091200154600d80546001600160a01b03909216918390811061326257613262613750565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d8054806132a1576132a1613800565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806132d2816137e7565b9150506131d5565b5050565b60005b838110156132f95781810151838201526020016132e1565b50506000910152565b60208152600082518060208401526133218160408501602087016132de565b601f01601f19169190910160400192915050565b6001600160a01b038116811461108457600080fd5b6000806040838503121561335d57600080fd5b823561336881613335565b946020939093013593505050565b60008060006060848603121561338b57600080fd5b833561339681613335565b925060208401356133a681613335565b929592945050506040919091013590565b6000602082840312156133c957600080fd5b5035919050565b600081518084526020808501945080840160005b838110156134095781516001600160a01b0316875295820195908201906001016133e4565b509495945050505050565b60208152600061342760208301846133d0565b9392505050565b60006020828403121561344057600080fd5b813561342781613335565b6000806040838503121561345e57600080fd5b50508035926020909101359150565b6000806040838503121561348057600080fd5b823561348b81613335565b9150602083013561349b81613335565b809150509250929050565b600181811c908216806134ba57607f821691505b6020821081036134da57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561350b57600080fd5b8151801515811461342757600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156107925761079261351b565b80820281158282048414176107925761079261351b565b60008261357857634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156107925761079261351b565b6000602082840312156135a257600080fd5b815161342781613335565b602080825260029082015261139560f21b604082015260600190565b6000602082840312156135db57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008060006060848603121561361b57600080fd5b8351925060208401519150604084015190509250925092565b600060033d111561364d5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff8111828210171561368457634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156136995790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156136c957505050505090565b82850191508151818111156136e15750505050505090565b843d87010160208285010111156136fb5750505050505090565b61370a60208286010187613650565b509095945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a06040820152600061378560a08301866133d0565b6001600160a01b0394909416606083015250608001529392505050565b7f50726f787920455448207472616e73666572206661696c65643a2000000000008152600082516137da81601b8501602087016132de565b91909101601b0192915050565b6000600182016137f9576137f961351b565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723a2646970667358221220dcccce511dbf033d9a4453a402fa85a2ef860ab5f7bc85d41e1ec0fdb873e7b164736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102135760003560e01c8063808a545711610118578063c0d78655116100a0578063dd62ed3e1161006f578063dd62ed3e14610649578063e3a8fa551461068f578063ed9cacfe14610697578063f2fde38b146106ac578063fd7c9fab146106cc57600080fd5b8063c0d78655146105b9578063c84a705c146105d9578063d4d7b19a146105f9578063d720a2a81461062957600080fd5b8063975b87e8116100e7578063975b87e814610518578063a8602fea14610538578063a9059cbb14610558578063b70143c914610578578063b9276e4b1461059857600080fd5b8063808a5457146104b05780638129fc1c146104d05780638da5cb5b146104e557806395d89b411461050357600080fd5b80634626402b1161019b57806362b6327a1161016a57806362b6327a1461040a5780636ec4be901461042a57806370a08231146104505780637136982b146104865780637ac84fc11461049b57600080fd5b80634626402b1461039357806357376198146103b35780635d76b04c146103d35780635fe8e7cc146103e857600080fd5b806323b872dd116101e257806323b872dd146102ea5780632a11ced01461030a578063313ce56714610342578063397883d21461035e578063461a3a951461037357600080fd5b806306fdde031461025b57806308dee2b414610286578063095ea7b3146102a557806318160ddd146102d557600080fd5b366102565734156102545760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b34801561026757600080fd5b506102706106ec565b60405161027d9190613302565b60405180910390f35b34801561029257600080fd5b50600e545b60405190815260200161027d565b3480156102b157600080fd5b506102c56102c036600461334a565b61077e565b604051901515815260200161027d565b3480156102e157600080fd5b50600254610297565b3480156102f657600080fd5b506102c5610305366004613376565b610798565b34801561031657600080fd5b5061032a6103253660046133b7565b6107bc565b6040516001600160a01b03909116815260200161027d565b34801561034e57600080fd5b506040516012815260200161027d565b34801561036a57600080fd5b506102546107e6565b34801561037f57600080fd5b5060095461032a906001600160a01b031681565b34801561039f57600080fd5b50600b5461032a906001600160a01b031681565b3480156103bf57600080fd5b506102546103ce36600461334a565b610904565b3480156103df57600080fd5b50600f54610297565b3480156103f457600080fd5b506103fd6109d0565b60405161027d9190613414565b34801561041657600080fd5b5060075461032a906001600160a01b031681565b34801561043657600080fd5b5060105461032a906201000090046001600160a01b031681565b34801561045c57600080fd5b5061029761046b36600461342e565b6001600160a01b031660009081526020819052604090205490565b34801561049257600080fd5b50600d54610297565b3480156104a757600080fd5b50610254610a31565b3480156104bc57600080fd5b50600a5461032a906001600160a01b031681565b3480156104dc57600080fd5b50610254610d11565b3480156104f157600080fd5b506006546001600160a01b031661032a565b34801561050f57600080fd5b50610270611087565b34801561052457600080fd5b5061025461053336600461344b565b611096565b34801561054457600080fd5b5061025461055336600461342e565b6117d9565b34801561056457600080fd5b506102c561057336600461334a565b61187d565b34801561058457600080fd5b506102546105933660046133b7565b61188b565b3480156105a457600080fd5b506010546102c590600160b01b900460ff1681565b3480156105c557600080fd5b506102546105d436600461342e565b611a5f565b3480156105e557600080fd5b506102546105f436600461342e565b611ac4565b34801561060557600080fd5b506102c561061436600461342e565b600c6020526000908152604090205460ff1681565b34801561063557600080fd5b506102546106443660046133b7565b611bcd565b34801561065557600080fd5b5061029761066436600461346d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610254611d9f565b3480156106a357600080fd5b50610254611fed565b3480156106b857600080fd5b506102546106c736600461342e565b612266565b3480156106d857600080fd5b5060085461032a906001600160a01b031681565b6060600380546106fb906134a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610727906134a6565b80156107745780601f1061074957610100808354040283529160200191610774565b820191906000526020600020905b81548152906001019060200180831161075757829003601f168201915b5050505050905090565b60003361078c8185856122b2565b60019150505b92915050565b6000336107a6858285612364565b6107b18585856123cc565b506001949350505050565b600d81815481106107cc57600080fd5b6000918252602090912001546001600160a01b0316905081565b6107ee61274a565b6000600e54118061080157506000600f54115b6108375760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d5461086b5760405162461bcd60e51b815260206004820152600260248201526109c960f31b604482015260640161082e565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108a657600080fd5b505af19250505080156108b7575060015b610902577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f546040516108f9929190918252602082015260400190565b60405180910390a15b565b61090c61274a565b306001600160a01b038316036109495760405162461bcd60e51b815260206004820152600260248201526121a360f11b604482015260640161082e565b816001600160a01b031663a9059cbb61096a6006546001600160a01b031690565b836040518363ffffffff1660e01b81526004016109889291906134e0565b6020604051808303816000875af11580156109a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cb91906134f9565b505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561077457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a0a575050505050905090565b600260055403610a685760405162461bcd60e51b8152602060048201526002602482015261523160f01b604482015260640161082e565b6002600555601054610100900460ff1615610aaa5760405162461bcd60e51b8152602060048201526002602482015261041560f41b604482015260640161082e565b6010805461ff001916610100179055600e54600f5481158015610acb575080155b15610ae25750506010805461ff0019169055610d0a565b68056bc75e2d631000006000610af88385613531565b905081811115610ba457600081610b1784670de0b6b3a7640000613544565b610b21919061355b565b9050670de0b6b3a7640000610b368287613544565b610b40919061355b565b9450670de0b6b3a7640000610b558286613544565b610b5f919061355b565b9350610b6b8486613531565b915084600e6000828254610b7f919061357d565b9250508190555083600f6000828254610b98919061357d565b90915550610baf915050565b6000600e819055600f555b60408051858152602081018590527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a1600754610c029030906001600160a01b03166000196122b2565b476000610c0e83612798565b905080600003610c2f5750506010805461ff001916905550610d0a92505050565b47828111610ca057600080516020613817833981519152604051610c809060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150506010805461ff001916905550610d0a9350505050565b6000610cac848361357d565b9050600085610cbb8a84613544565b610cc5919061355b565b90506000610cd3828461357d565b90508115610ce557610ce5828b612c0c565b8015610cf457610cf481612dc7565b50506010805461ff001916905550505050505050505b6001600555565b610d1961274a565b60105460ff1615610d515760405162461bcd60e51b8152602060048201526002602482015261231960f11b604482015260640161082e565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd49190613590565b600a80546001600160a01b0319166001600160a01b03929092169182179055610e90576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6f9190613590565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b0316610ecd5760405162461bcd60e51b8152602060048201526002602482015261463360f01b604482015260640161082e565b600754610ee79030906001600160a01b03166000196122b2565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610f1f92911690600019906004016134e0565b6020604051808303816000875af1158015610f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6291906134f9565b610f935760405162461bcd60e51b8152602060048201526002602482015261118d60f21b604482015260640161082e565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610fcb92911690600019906004016134e0565b6020604051808303816000875af1158015610fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100e91906134f9565b50600a5460405163095ea7b360e01b8152309163095ea7b391611041916001600160a01b031690600019906004016134e0565b6020604051808303816000875af1158015611060573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108491906134f9565b50565b6060600480546106fb906134a6565b61109e61274a565b600082116110be5760405162461bcd60e51b815260040161082e906135ad565b600081116110f35760405162461bcd60e51b81526020600482015260026024820152614e5360f01b604482015260640161082e565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115491906135c9565b10156111875760405162461bcd60e51b815260206004820152600260248201526124a160f11b604482015260640161082e565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156111cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f391906135c9565b10156112265760405162461bcd60e51b8152602060048201526002602482015261495360f01b604482015260640161082e565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061125a903390309086906004016135e2565b6020604051808303816000875af1158015611279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129d91906134f9565b6112ce5760405162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015260640161082e565b6007546112e69030906001600160a01b0316846122b2565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261131c9291169085906004016134e0565b6020604051808303816000875af115801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f91906134f9565b506007546009546001600160a01b039182169163e8e337009130911685856000803361138d42610258613531565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1925050508015611425575060408051601f3d908101601f1916820190925261142291810190613606565b60015b6116ad57611431613634565b806308c379a003611574575061144561368b565b806114505750611576565b6007546114699030906001600160a01b031660006122b2565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926114a0929116906000906004016134e0565b6020604051808303816000875af11580156114bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e391906134f9565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061151690339086906004016134e0565b6020604051808303816000875af1158015611535573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155991906134f9565b508060405162461bcd60e51b815260040161082e9190613302565b505b60075461158f9030906001600160a01b031660006122b2565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926115c6929116906000906004016134e0565b6020604051808303816000875af11580156115e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160991906134f9565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061163c90339085906004016134e0565b6020604051808303816000875af115801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f91906134f9565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b604482015260640161082e565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175691906135c9565b905080156109cb5760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061179090339085906004016134e0565b6020604051808303816000875af11580156117af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d391906134f9565b50505050565b6117e161274a565b6001600160a01b03811661181c5760405162461bcd60e51b81526020600482015260026024820152615a4160f01b604482015260640161082e565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b60003361078c8185856123cc565b61189361274a565b6002600554036118ca5760405162461bcd60e51b8152602060048201526002602482015261523160f01b604482015260640161082e565b60026005558061191c5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e2030000000604482015260640161082e565b306000908152602081905260409020548111156119725760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161082e565b601054600160b01b900460ff166119c05760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b604482015260640161082e565b60006119cb82612798565b905060008111611a1d5760405162461bcd60e51b815260206004820152601c60248201527f53776170206661696c65642c206e6f2045544820726563656976656400000000604482015260640161082e565b60408051838152602081018390527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a150506001600555565b611a6761274a565b6001600160a01b038116611aa25760405162461bcd60e51b815260206004820152600260248201526124a960f11b604482015260640161082e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611acc61274a565b601054600160b01b900460ff1615611b1a5760405162461bcd60e51b8152602060048201526011602482015270141c9bde1e48185b1c9958591e481cd95d607a1b604482015260640161082e565b6001600160a01b038116611b685760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642070726f7879206164647265737360581b604482015260640161082e565b6010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b611bd561274a565b60008111611bf55760405162461bcd60e51b815260040161082e906135ad565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015611c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5691906135c9565b1015611c895760405162461bcd60e51b815260206004820152600260248201526124a160f11b604482015260640161082e565b600754611ca39030906001600160a01b03166000196122b2565b476000611caf83612798565b905080600003611cbe57505050565b47828111611d1d57600080516020613817833981519152604051611d0f9060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150505050565b6000611d29848361357d565b905060006064611d3a601984613544565b611d44919061355b565b905060006064611d55601985613544565b611d5f919061355b565b90508115611d8757611d87826064611d7860198b613544565b611d82919061355b565b612c0c565b8015611d9657611d9681612dc7565b50505050505050565b611da761274a565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015611de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0991906135c9565b905060008111611e2b5760405162461bcd60e51b815260040161082e906135ad565b60003411611e605760405162461bcd60e51b81526020600482015260026024820152614e4560f01b604482015260640161082e565b600754611e789030906001600160a01b0316836122b2565b6007546001600160a01b031663f305d71934308460008033611e9c42610258613531565b6040518863ffffffff1660e01b8152600401611ebd96959493929190613715565b60606040518083038185885af193505050508015611ef8575060408051601f3d908101601f19168201909252611ef591810190613606565b60015b611faf57611f04613634565b806308c379a003611f685750611f1861368b565b80611f235750611f6a565b600754611f3c9030906001600160a01b031660006122b2565b60405133904780156108fc02916000818181858888f19350505050158015611559573d6000803e3d6000fd5b505b600754611f839030906001600160a01b031660006122b2565b60405133904780156108fc02916000818181858888f1935050505015801561167f573d6000803e3d6000fd5b5050604080518381523460208201527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a150565b611ff561274a565b60075461200f9030906001600160a01b03166000196122b2565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261204792911690600019906004016134e0565b6020604051808303816000875af1925050508015612082575060408051601f3d908101601f1916820190925261207f918101906134f9565b60015b156120d857506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926120cf926001600160a01b0391821692911690600019906135e2565b60405180910390a15b600a546001600160a01b03161561090257600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261212192911690600019906004016134e0565b6020604051808303816000875af192505050801561215c575060408051601f3d908101601f19168201909252612159918101906134f9565b60015b156121b25750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926121a9926001600160a01b0391821692911690600019906135e2565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b3916121e4916001600160a01b031690600019906004016134e0565b6020604051808303816000875af192505050801561221f575060408051601f3d908101601f1916820190925261221c918101906134f9565b60015b156109025750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca916108f99130916001600160a01b031690600019906135e2565b61226e61274a565b6001600160a01b0381166122a95760405162461bcd60e51b81526020600482015260026024820152614f3160f01b604482015260640161082e565b61108481612f74565b6001600160a01b038316158015906122d257506001600160a01b03821615155b6123035760405162461bcd60e51b8152602060048201526002602482015261114d60f21b604482015260640161082e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054818110156123bf5760405162461bcd60e51b8152602060048201526002602482015261453560f01b604482015260640161082e565b6117d384848484036122b2565b601054610100900460ff161580156123f257506006546001600160a01b03848116911614155b801561240c57506006546001600160a01b03838116911614155b801561242157506001600160a01b0383163014155b801561243a5750600a546001600160a01b038381169116145b156126e7576000606461244e600584613544565b612458919061355b565b905080156126e5576000606461246f601984613544565b612479919061355b565b90506000606461248a601985613544565b612494919061355b565b905060006124a2848661357d565b90506124af873086612fc6565b6124ba878783612fc6565b82600e60008282546124cc9190613531565b9250508190555081600f60008282546124e59190613531565b9091555050600f54600e5468056bc75e2d63100000916802b5e3af16b1880000916125109190613531565b1061267c5780600f54600e546125269190613531565b1115612577577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f5460405161256a929190918252602082015260400190565b60405180910390a161267c565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156125b257600080fd5b505af19250505080156125c3575060015b61267c576125cf613634565b806308c379a00361261957506125e361368b565b806125ee575061261b565b6000805160206138178339815191528160405161260b9190613302565b60405180910390a15061267c565b505b60008051602061381783398151915260405161256a906020808252602b908201527f556e6b6e6f776e206572726f7220696e2070726f636573734c6971756964697460408201526a079416e6441697264726f760ac1b606082015260800190565b6126af88678ac7230489e800006126a88b6001600160a01b031660009081526020819052604090205490565b10156130cb565b6126db87678ac7230489e800006126a88a6001600160a01b031660009081526020819052604090205490565b5050505050505050565b505b6126f2838383612fc6565b61271e83678ac7230489e800006126a8866001600160a01b031660009081526020819052604090205490565b6109cb82678ac7230489e800006126a8856001600160a01b031660009081526020819052604090205490565b3361275d6006546001600160a01b031690565b6001600160a01b0316146109025760405162461bcd60e51b8152602060048201526002602482015261279960f11b604482015260640161082e565b6000816000036127aa57506000919050565b601054600160b01b900460ff166127f85760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b604482015260640161082e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061282d5761282d613750565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128aa9190613590565b816001815181106128bd576128bd613750565b6001600160a01b0392831660209182029290920101526007546000916128e691309116866122b2565b60006128f442610e10613531565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac9479261293d928b9289928b9262010000909104909116908990600401613766565b600060405180830381600087803b15801561295757600080fd5b505af1925050508015612968575060015b612a1d57612974613634565b806308c379a0036129c5575061298861368b565b8061299357506129c7565b600080516020613817833981519152816040516129b09190613302565b60405180910390a15060009695505050505050565b505b600080516020613817833981519152604051612a09906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b60405180910390a150600095945050505050565b601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a6d57600080fd5b505af1925050508015612a7e575060015b612b4357612a8a613634565b806308c379a003612ae35750612a9e61368b565b80612aa95750612ae5565b60008051602061381783398151915281604051602001612ac991906137a2565b60408051601f19818403018152908290526129b091613302565b505b600080516020613817833981519152604051612a099060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b476000612b50838361357d565b90508015612b9c5760408051898152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1979650505050505050565b600080516020613817833981519152604051612bf69060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a1506000979650505050505050565b60006064612c1a818061357d565b612c249084613544565b612c2e919061355b565b905060006064612c3e818061357d565b612c489086613544565b612c52919061355b565b6007549091506001600160a01b031663f305d719853086868683612c7842610e10613531565b6040518863ffffffff1660e01b8152600401612c9996959493929190613715565b60606040518083038185885af193505050508015612cd4575060408051601f3d908101601f19168201909252612cd191810190613606565b60015b612d8e57612ce0613634565b806308c379a003612d3c5750612cf461368b565b80612cff5750612d3e565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad81604051612d2e9190613302565b60405180910390a1506117d3565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad604051612d81906020808252600190820152604560f81b604082015260600190565b60405180910390a16117d3565b505060408051858152602081018790527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b925001611d0f565b600d54801580612dd5575081155b15612dde575050565b6000612dea828461355b565b905080600003612df957505050565b60005b82811015612f35576000600d8281548110612e1957612e19613750565b6000918252602090912001546001600160a01b031690508015801590612e4857506001600160a01b0381163014155b8015612e625750600a546001600160a01b03828116911614155b15612f22576000816001600160a01b03168460405160006040518083038185875af1925050503d8060008114612eb4576040519150601f19603f3d011682016040523d82523d6000602084013e612eb9565b606091505b5050905080612f20577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051612f1790602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b505b5080612f2d816137e7565b915050612dfc565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c217910160405180910390a1505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831615801590612fe657506001600160a01b03821615155b6130175760405162461bcd60e51b8152602060048201526002602482015261453160f01b604482015260640161082e565b6001600160a01b038316600090815260208190526040902054818110156130655760405162461bcd60e51b8152602060048201526002602482015261229960f11b604482015260640161082e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36117d3565b600a546001600160a01b038381169116148015906130f257506001600160a01b0382163014155b156132da5780801561311d57506001600160a01b0382166000908152600c602052604090205460ff16155b1561318957506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b801580156131af57506001600160a01b0382166000908152600c602052604090205460ff165b156132da576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d548110156109cb57826001600160a01b0316600d82815481106131fc576131fc613750565b6000918252602090912001546001600160a01b0316036132c857600d80546132269060019061357d565b8154811061323657613236613750565b600091825260209091200154600d80546001600160a01b03909216918390811061326257613262613750565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d8054806132a1576132a1613800565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806132d2816137e7565b9150506131d5565b5050565b60005b838110156132f95781810151838201526020016132e1565b50506000910152565b60208152600082518060208401526133218160408501602087016132de565b601f01601f19169190910160400192915050565b6001600160a01b038116811461108457600080fd5b6000806040838503121561335d57600080fd5b823561336881613335565b946020939093013593505050565b60008060006060848603121561338b57600080fd5b833561339681613335565b925060208401356133a681613335565b929592945050506040919091013590565b6000602082840312156133c957600080fd5b5035919050565b600081518084526020808501945080840160005b838110156134095781516001600160a01b0316875295820195908201906001016133e4565b509495945050505050565b60208152600061342760208301846133d0565b9392505050565b60006020828403121561344057600080fd5b813561342781613335565b6000806040838503121561345e57600080fd5b50508035926020909101359150565b6000806040838503121561348057600080fd5b823561348b81613335565b9150602083013561349b81613335565b809150509250929050565b600181811c908216806134ba57607f821691505b6020821081036134da57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561350b57600080fd5b8151801515811461342757600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156107925761079261351b565b80820281158282048414176107925761079261351b565b60008261357857634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156107925761079261351b565b6000602082840312156135a257600080fd5b815161342781613335565b602080825260029082015261139560f21b604082015260600190565b6000602082840312156135db57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008060006060848603121561361b57600080fd5b8351925060208401519150604084015190509250925092565b600060033d111561364d5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff8111828210171561368457634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156136995790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156136c957505050505090565b82850191508151818111156136e15750505050505090565b843d87010160208285010111156136fb5750505050505090565b61370a60208286010187613650565b509095945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a06040820152600061378560a08301866133d0565b6001600160a01b0394909416606083015250608001529392505050565b7f50726f787920455448207472616e73666572206661696c65643a2000000000008152600082516137da81601b8501602087016132de565b91909101601b0192915050565b6000600182016137f9576137f961351b565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723a2646970667358221220dcccce511dbf033d9a4453a402fa85a2ef860ab5f7bc85d41e1ec0fdb873e7b164736f6c63430008110033
Deployed Bytecode Sourcemap
9242:24775:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33588:9;:13;33584:85;;33623:34;;33647:9;160:25:1;;33635:10:0;;33623:34;;148:2:1;133:18;33623:34:0;;;;;;;33584:85;9242:24775;;;;;2873:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29189:118;;;;;;;;;;-1:-1:-1;29276:23:0;;29189:118;;;160:25:1;;;148:2;133:18;29189:118:0;14:177:1;3740:190:0;;;;;;;;;;-1:-1:-1;3740:190:0;;;;;:::i;:::-;;:::i;:::-;;;1473:14:1;;1466:22;1448:41;;1436:2;1421:18;3740:190:0;1308:187:1;3167:99:0;;;;;;;;;;-1:-1:-1;3246:12:0;;3167:99;;3938:250;;;;;;;;;;-1:-1:-1;3938:250:0;;;;;:::i;:::-;;:::i;10345:24::-;;;;;;;;;;-1:-1:-1;10345:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2310:32:1;;;2292:51;;2280:2;2265:18;10345:24:0;2146:203:1;3075:84:0;;;;;;;;;;-1:-1:-1;3075:84:0;;3149:2;2496:36:1;;2484:2;2469:18;3075:84:0;2354:184:1;29488:378:0;;;;;;;;;;;;;:::i;10169:25::-;;;;;;;;;;-1:-1:-1;10169:25:0;;;;-1:-1:-1;;;;;10169:25:0;;;10236:29;;;;;;;;;;-1:-1:-1;10236:29:0;;;;-1:-1:-1;;;;;10236:29:0;;;28955:183;;;;;;;;;;-1:-1:-1;28955:183:0;;;;;:::i;:::-;;:::i;29315:114::-;;;;;;;;;;-1:-1:-1;29400:21:0;;29315:114;;24958:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10071:41::-;;;;;;;;;;-1:-1:-1;10071:41:0;;;;-1:-1:-1;;;;;10071:41:0;;;11393:24;;;;;;;;;;-1:-1:-1;11393:24:0;;;;;;;-1:-1:-1;;;;;11393:24:0;;;3274:118;;;;;;;;;;-1:-1:-1;3274:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;24848:98;;;;;;;;;;-1:-1:-1;24924:7:0;:14;24848:98;;17344:2962;;;;;;;;;;;;;:::i;10201:28::-;;;;;;;;;;-1:-1:-1;10201:28:0;;;;-1:-1:-1;;;;;10201:28:0;;;12267:836;;;;;;;;;;;;;:::i;1861:87::-;;;;;;;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;1934:6:0;1861:87;;2972:95;;;;;;;;;;;;;:::i;25109:2260::-;;;;;;;;;;-1:-1:-1;25109:2260:0;;;;;:::i;:::-;;:::i;31528:319::-;;;;;;;;;;-1:-1:-1;31528:319:0;;;;;:::i;:::-;;:::i;3400:182::-;;;;;;;;;;-1:-1:-1;3400:182:0;;;;;:::i;:::-;;:::i;30906:564::-;;;;;;;;;;-1:-1:-1;30906:564:0;;;;;:::i;:::-;;:::i;11424:24::-;;;;;;;;;;-1:-1:-1;11424:24:0;;;;-1:-1:-1;;;11424:24:0;;;;;;28781:166;;;;;;;;;;-1:-1:-1;28781:166:0;;;;;:::i;:::-;;:::i;33719:295::-;;;;;;;;;;-1:-1:-1;33719:295:0;;;;;:::i;:::-;;:::i;10298:40::-;;;;;;;;;;-1:-1:-1;10298:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31898:1534;;;;;;;;;;-1:-1:-1;31898:1534:0;;;;;:::i;:::-;;:::i;3590:142::-;;;;;;;;;;-1:-1:-1;3590:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;3697:18:0;;;3670:7;3697:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3590:142;27454:1319;;;:::i;29912:958::-;;;;;;;;;;;;;:::i;2064:165::-;;;;;;;;;;-1:-1:-1;2064:165:0;;;;;:::i;:::-;;:::i;10119:43::-;;;;;;;;;;-1:-1:-1;10119:43:0;;;;-1:-1:-1;;;;;10119:43:0;;;2873:91;2918:13;2951:5;2944:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:91;:::o;3740:190::-;3814:4;3847:10;3868:32;3847:10;3884:7;3893:6;3868:8;:32::i;:::-;3918:4;3911:11;;;3740:190;;;;;:::o;3938:250::-;4026:4;4061:10;4082:38;4098:4;4061:10;4113:6;4082:15;:38::i;:::-;4131:27;4141:4;4147:2;4151:6;4131:9;:27::i;:::-;-1:-1:-1;4176:4:0;;3938:250;-1:-1:-1;;;;3938:250:0:o;10345:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10345:24:0;;-1:-1:-1;10345:24:0;:::o;29488:378::-;1820:13;:11;:13::i;:::-;29581:1:::1;29555:23;;:27;:56;;;;29610:1;29586:21;;:25;29555:56;29547:71;;;::::0;-1:-1:-1;;;29547:71:0;;5227:2:1;29547:71:0::1;::::0;::::1;5209:21:1::0;5266:1;5246:18;;;5239:29;-1:-1:-1;;;5284:18:1;;;5277:32;5326:18;;29547:71:0::1;;;;;;;;;29637:7;:14:::0;29629:33:::1;;;::::0;-1:-1:-1;;;29629:33:0;;5557:2:1;29629:33:0::1;::::0;::::1;5539:21:1::0;5596:1;5576:18;;;5569:29;-1:-1:-1;;;5614:18:1;;;5607:32;5656:18;;29629:33:0::1;5355:325:1::0;29629:33:0::1;29677:4;-1:-1:-1::0;;;;;29677:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;29673:186;;29785:62;29800:23;;29825:21;;29785:62;;;;;;5859:25:1::0;;;5915:2;5900:18;;5893:34;5847:2;5832:18;;5685:248;29785:62:0::1;;;;;;;;29673:186;29488:378::o:0;28955:183::-;1820:13;:11;:13::i;:::-;29066:4:::1;-1:-1:-1::0;;;;;29048:23:0;::::1;::::0;29040:38:::1;;;::::0;-1:-1:-1;;;29040:38:0;;6140:2:1;29040:38:0::1;::::0;::::1;6122:21:1::0;6179:1;6159:18;;;6152:29;-1:-1:-1;;;6197:18:1;;;6190:32;6239:18;;29040:38:0::1;5938:325:1::0;29040:38:0::1;29096:6;-1:-1:-1::0;;;;;29089:23:0::1;;29113:7;1934:6:::0;;-1:-1:-1;;;;;1934:6:0;;1861:87;29113:7:::1;29122;29089:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28955:183:::0;;:::o;24958:96::-;25003:16;25039:7;25032:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25032:14:0;;;;;;;;;;;;;;;;;;;;;;24958:96;:::o;17344:2962::-;1114:1;1260:7;;:19;1252:34;;;;-1:-1:-1;;;1252:34:0;;7031:2:1;1252:34:0;;;7013:21:1;7070:1;7050:18;;;7043:29;-1:-1:-1;;;7088:18:1;;;7081:32;7130:18;;1252:34:0;6829:325:1;1252:34:0;1114:1;1297:7;:18;17424:7:::1;::::0;::::1;::::0;::::1;;;17423:8;17415:23;;;::::0;-1:-1:-1;;;17415:23:0;;7361:2:1;17415:23:0::1;::::0;::::1;7343:21:1::0;7400:1;7380:18;;;7373:29;-1:-1:-1;;;7418:18:1;;;7411:32;7460:18;;17415:23:0::1;7159:325:1::0;17415:23:0::1;17449:7;:14:::0;;-1:-1:-1;;17449:14:0::1;;;::::0;;17513:23:::1;::::0;17574:21:::1;::::0;17620:23;;:48;::::1;;;-1:-1:-1::0;17647:21:0;;17620:48:::1;17616:117;;;-1:-1:-1::0;;17685:7:0::1;:15:::0;;-1:-1:-1;;17685:15:0::1;::::0;;17715:7:::1;;17616:117;17830:12;17803:24;17937:37;17958:16:::0;17937:18;:37:::1;:::i;:::-;17909:65;;18108:16;18088:17;:36;18084:694;;;18172:13;18214:17:::0;18188:23:::1;:16:::0;18207:4:::1;18188:23;:::i;:::-;:43;;;;:::i;:::-;18172:59:::0;-1:-1:-1;18296:4:0::1;18267:26;18172:59:::0;18267:18;:26:::1;:::i;:::-;:33;;;;:::i;:::-;18246:54:::0;-1:-1:-1;18361:4:0::1;18334:24;18353:5:::0;18334:16;:24:::1;:::i;:::-;:31;;;;:::i;:::-;18315:50:::0;-1:-1:-1;18400:37:0::1;18315:50:::0;18400:18;:37:::1;:::i;:::-;18380:57;;18540:18;18513:23;;:45;;;;;;;:::i;:::-;;;;;;;;18598:16;18573:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;18084:694:0::1;::::0;-1:-1:-1;;18084:694:0::1;;18725:1;18699:23;:27:::0;;;18741:21:::1;:25:::0;18084:694:::1;18803:52;::::0;;5859:25:1;;;5915:2;5900:18;;5893:34;;;18803:52:0::1;::::0;5832:18:1;18803:52:0::1;;;;;;;18938:16;::::0;18906:69:::1;::::0;18923:4:::1;::::0;-1:-1:-1;;;;;18938:16:0::1;-1:-1:-1::0;;18906:8:0::1;:69::i;:::-;19071:21;19043:25;19193:31;19206:17:::0;19193:12:::1;:31::i;:::-;19171:53;;19249:11;19264:1;19249:16:::0;19245:85:::1;;-1:-1:-1::0;;19282:7:0::1;:15:::0;;-1:-1:-1;;19282:15:0::1;::::0;;-1:-1:-1;19312:7:0::1;::::0;-1:-1:-1;;;19312:7:0::1;19245:85;19428:21;19464:39:::0;;::::1;19460:167;;-1:-1:-1::0;;;;;;;;;;;19525:39:0::1;;;;8481:2:1::0;8463:21;;;8520:2;8500:18;;;8493:30;-1:-1:-1;;;8554:2:1;8539:18;;8532:55;8619:2;8604:18;;8279:349;19525:39:0::1;;;;;;;;-1:-1:-1::0;;19579:7:0::1;:15:::0;;-1:-1:-1;;19579:15:0::1;::::0;;-1:-1:-1;19609:7:0::1;::::0;-1:-1:-1;;;;19609:7:0::1;19460:167;19691:25;19719:38;19740:17:::0;19719:18;:38:::1;:::i;:::-;19691:66:::0;-1:-1:-1;19808:23:0::1;19875:17:::0;19834:38:::1;19854:18:::0;19691:66;19834:38:::1;:::i;:::-;:58;;;;:::i;:::-;19808:84:::0;-1:-1:-1;19903:21:0::1;19927:35;19808:84:::0;19927:17;:35:::1;:::i;:::-;19903:59:::0;-1:-1:-1;20021:19:0;;20017:102:::1;;20057:50;20071:15;20088:18;20057:13;:50::i;:::-;20180:17:::0;;20176:87:::1;;20214:37;20237:13;20214:22;:37::i;:::-;-1:-1:-1::0;;20283:7:0::1;:15:::0;;-1:-1:-1;;20283:15:0::1;::::0;;-1:-1:-1;;;;;;;;1326:1:0::1;1070::::0;1338:7;:22;17344:2962::o;12267:836::-;1820:13;:11;:13::i;:::-;12328:12:::1;::::0;::::1;;12327:13;12319:28;;;::::0;-1:-1:-1;;;12319:28:0;;8835:2:1;12319:28:0::1;::::0;::::1;8817:21:1::0;8874:1;8854:18;;;8847:29;-1:-1:-1;;;8892:18:1;;;8885:32;8934:18;;12319:28:0::1;8633:325:1::0;12319:28:0::1;12358:12;:19:::0;;-1:-1:-1;;12358:19:0::1;12373:4;12358:19;::::0;;12449:17:::1;::::0;12490:10:::1;::::0;12449:52:::1;::::0;-1:-1:-1;;;12449:52:0;;12483:4:::1;12449:52;::::0;::::1;9175:34:1::0;-1:-1:-1;;;;;12490:10:0;;::::1;9225:18:1::0;;;9218:43;12449:17:0;::::1;::::0;:25:::1;::::0;9110:18:1;;12449:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12433:13;:68:::0;;-1:-1:-1;;;;;;12433:68:0::1;-1:-1:-1::0;;;;;12433:68:0;;;::::1;::::0;;::::1;::::0;;12567:131:::1;;12631:17;::::0;12675:10:::1;::::0;12631:55:::1;::::0;-1:-1:-1;;;12631:55:0;;12668:4:::1;12631:55;::::0;::::1;9175:34:1::0;-1:-1:-1;;;;;12675:10:0;;::::1;9225:18:1::0;;;9218:43;12631:17:0;::::1;::::0;:28:::1;::::0;9110:18:1;;12631:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12615:13;:71:::0;;-1:-1:-1;;;;;;12615:71:0::1;-1:-1:-1::0;;;;;12615:71:0;;;::::1;::::0;;;::::1;::::0;;12567:131:::1;12726:13;::::0;-1:-1:-1;;;;;12726:13:0::1;12718:42;;;::::0;-1:-1:-1;;;12718:42:0;;9730:2:1;12718:42:0::1;::::0;::::1;9712:21:1::0;9769:1;9749:18;;;9742:29;-1:-1:-1;;;9787:18:1;;;9780:32;9829:18;;12718:42:0::1;9528:325:1::0;12718:42:0::1;12805:16;::::0;12773:69:::1;::::0;12790:4:::1;::::0;-1:-1:-1;;;;;12805:16:0::1;-1:-1:-1::0;;12773:8:0::1;:69::i;:::-;12878:10;::::0;12906:16:::1;::::0;12871:72:::1;::::0;-1:-1:-1;;;12871:72:0;;-1:-1:-1;;;;;12878:10:0;;::::1;::::0;12871:26:::1;::::0;:72:::1;::::0;12906:16;::::1;::::0;-1:-1:-1;;12925:17:0;12871:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12863:87;;;::::0;-1:-1:-1;;;12863:87:0;;10060:2:1;12863:87:0::1;::::0;::::1;10042:21:1::0;10099:1;10079:18;;;10072:29;-1:-1:-1;;;10117:18:1;;;10110:32;10159:18;;12863:87:0::1;9858:325:1::0;12863:87:0::1;12968:10;::::0;12988:13:::1;::::0;12961:60:::1;::::0;-1:-1:-1;;;12961:60:0;;-1:-1:-1;;;;;12968:10:0;;::::1;::::0;12961:26:::1;::::0;:60:::1;::::0;12988:13;::::1;::::0;-1:-1:-1;;13003:17:0;12961:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13062:13:0::1;::::0;13032:63:::1;::::0;-1:-1:-1;;;13032:63:0;;13047:4:::1;::::0;13032:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;13062:13:0::1;::::0;-1:-1:-1;;13077:17:0;13032:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12267:836::o:0;2972:95::-;3019:13;3052:7;3045:14;;;;;:::i;25109:2260::-;1820:13;:11;:13::i;:::-;25242:1:::1;25228:11;:15;25220:30;;;;-1:-1:-1::0;;;25220:30:0::1;;;;;;;:::i;:::-;25283:1;25269:11;:15;25261:30;;;::::0;-1:-1:-1;;;25261:30:0;;10720:2:1;25261:30:0::1;::::0;::::1;10702:21:1::0;10759:1;10739:18;;;10732:29;-1:-1:-1;;;10777:18:1;;;10770:32;10819:18;;25261:30:0::1;10518:325:1::0;25261:30:0::1;25334:46;::::0;-1:-1:-1;;;25334:46:0;;25349:4:::1;25334:46;::::0;::::1;2292:51:1::0;;;25384:11:0;;25334:31:::1;::::0;2265:18:1;;25334:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;25312:113;;;::::0;-1:-1:-1;;;25312:113:0;;11239:2:1;25312:113:0::1;::::0;::::1;11221:21:1::0;11278:1;11258:18;;;11251:29;-1:-1:-1;;;11296:18:1;;;11289:32;11338:18;;25312:113:0::1;11037:325:1::0;25312:113:0::1;25475:10;::::0;25468:40:::1;::::0;-1:-1:-1;;;25468:40:0;;25497:10:::1;25468:40;::::0;::::1;2292:51:1::0;25512:11:0;;-1:-1:-1;;;;;25475:10:0::1;::::0;25468:28:::1;::::0;2265:18:1;;25468:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;25446:107;;;::::0;-1:-1:-1;;;25446:107:0;;11569:2:1;25446:107:0::1;::::0;::::1;11551:21:1::0;11608:1;11588:18;;;11581:29;-1:-1:-1;;;11626:18:1;;;11619:32;11668:18;;25446:107:0::1;11367:325:1::0;25446:107:0::1;25655:10;::::0;25648:71:::1;::::0;-1:-1:-1;;;25648:71:0;;-1:-1:-1;;;;;25655:10:0;;::::1;::::0;25648:31:::1;::::0;:71:::1;::::0;25680:10:::1;::::0;25700:4:::1;::::0;25707:11;;25648:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25626:123;;;::::0;-1:-1:-1;;;25626:123:0;;12279:2:1;25626:123:0::1;::::0;::::1;12261:21:1::0;12318:1;12298:18;;;12291:29;-1:-1:-1;;;12336:18:1;;;12329:32;12378:18;;25626:123:0::1;12077:325:1::0;25626:123:0::1;25828:16;::::0;25796:63:::1;::::0;25813:4:::1;::::0;-1:-1:-1;;;;;25828:16:0::1;25847:11:::0;25796:8:::1;:63::i;:::-;25877:10;::::0;25905:16:::1;::::0;25870:66:::1;::::0;-1:-1:-1;;;25870:66:0;;-1:-1:-1;;;;;25877:10:0;;::::1;::::0;25870:26:::1;::::0;:66:::1;::::0;25905:16;::::1;::::0;25924:11;;25870:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25961:16:0::1;::::0;26033:10:::1;::::0;-1:-1:-1;;;;;25961:16:0;;::::1;::::0;:29:::1;::::0;26013:4:::1;::::0;26033:10:::1;26058:11:::0;26084;25961:16:::1;::::0;26234:10:::1;26259:21;:15;26277:3;26259:21;:::i;:::-;25961:356;::::0;::::1;::::0;;;-1:-1:-1;;;;;;25961:356:0;;;-1:-1:-1;;;;;12822:15:1;;;25961:356:0::1;::::0;::::1;12804:34:1::0;12874:15;;;12854:18;;;12847:43;12906:18;;;12899:34;;;;12949:18;;;12942:34;;;;12992:19;;;12985:35;;;;13036:19;;;13029:35;13101:15;;;13080:19;;;13073:44;13133:19;;;13126:35;;;;12738:19;;25961:356:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25961:356:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25961:356:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25957:1147;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;26472:16;::::0;26440:53:::1;::::0;26457:4:::1;::::0;-1:-1:-1;;;;;26472:16:0::1;;26440:8;:53::i;:::-;26515:10;::::0;26543:16:::1;::::0;26508:56:::1;::::0;-1:-1:-1;;;26508:56:0;;-1:-1:-1;;;;;26515:10:0;;::::1;::::0;26508:26:::1;::::0;:56:::1;::::0;26543:16;::::1;::::0;26515:10:::1;::::0;26508:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26648:10:0::1;::::0;26641:52:::1;::::0;-1:-1:-1;;;26641:52:0;;-1:-1:-1;;;;;26648:10:0;;::::1;::::0;26641:27:::1;::::0;:52:::1;::::0;26669:10:::1;::::0;26681:11;;26641:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26729:6;26722:14;;-1:-1:-1::0;;;26722:14:0::1;;;;;;;;:::i;25957:1147::-;;;26830:16;::::0;26798:53:::1;::::0;26815:4:::1;::::0;-1:-1:-1;;;;;26830:16:0::1;;26798:8;:53::i;:::-;26873:10;::::0;26901:16:::1;::::0;26866:56:::1;::::0;-1:-1:-1;;;26866:56:0;;-1:-1:-1;;;;;26873:10:0;;::::1;::::0;26866:26:::1;::::0;:56:::1;::::0;26901:16;::::1;::::0;26873:10:::1;::::0;26866:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27006:10:0::1;::::0;26999:52:::1;::::0;-1:-1:-1;;;26999:52:0;;-1:-1:-1;;;;;27006:10:0;;::::1;::::0;26999:27:::1;::::0;:52:::1;::::0;27027:10:::1;::::0;27039:11;;26999:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27080:12:0::1;::::0;-1:-1:-1;;;27080:12:0;;15315:2:1;27080:12:0::1;::::0;::::1;15297:21:1::0;15354:1;15334:18;;;15327:29;-1:-1:-1;;;15372:18:1;;;15365:32;15414:18;;27080:12:0::1;15113:325:1::0;25957:1147:0::1;-1:-1:-1::0;;26338:40:0::1;::::0;;5859:25:1;;;5915:2;5900:18;;5893:34;;;26338:40:0::1;::::0;-1:-1:-1;5832:18:1;26338:40:0::1;;;;;;;27207:10;::::0;27200:43:::1;::::0;-1:-1:-1;;;27200:43:0;;27237:4:::1;27200:43;::::0;::::1;2292:51:1::0;27174:23:0::1;::::0;-1:-1:-1;;;;;27207:10:0::1;::::0;27200:28:::1;::::0;2265:18:1;;27200:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27174:69:::0;-1:-1:-1;27258:19:0;;27254:108:::1;;27301:10;::::0;27294:56:::1;::::0;-1:-1:-1;;;27294:56:0;;-1:-1:-1;;;;;27301:10:0;;::::1;::::0;27294:27:::1;::::0;:56:::1;::::0;27322:10:::1;::::0;27334:15;;27294:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25209:2160;25109:2260:::0;;:::o;31528:319::-;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;31620:31:0;::::1;31612:46;;;::::0;-1:-1:-1;;;31612:46:0;;15645:2:1;31612:46:0::1;::::0;::::1;15627:21:1::0;15684:1;15664:18;;;15657:29;-1:-1:-1;;;15702:18:1;;;15695:32;15744:18;;31612:46:0::1;15443:325:1::0;31612:46:0::1;31701:14;::::0;;-1:-1:-1;;;;;31726:34:0;;::::1;-1:-1:-1::0;;;;;;31726:34:0;::::1;::::0;::::1;::::0;;;31786:53:::1;::::0;;31701:14;;;::::1;9175:34:1::0;;;9240:2;9225:18;;9218:43;;;;31786:53:0::1;::::0;9110:18:1;31786:53:0::1;;;;;;;31601:246;31528:319:::0;:::o;3400:182::-;3470:4;3503:10;3524:28;3503:10;3541:2;3545:6;3524:9;:28::i;30906:564::-;1820:13;:11;:13::i;:::-;1114:1:::1;1260:7;;:19:::0;1252:34:::1;;;::::0;-1:-1:-1;;;1252:34:0;;7031:2:1;1252:34:0::1;::::0;::::1;7013:21:1::0;7070:1;7050:18;;;7043:29;-1:-1:-1;;;7088:18:1;;;7081:32;7130:18;;1252:34:0::1;6829:325:1::0;1252:34:0::1;1114:1;1297:7;:18:::0;30998:15;30990:57:::2;;;::::0;-1:-1:-1;;;30990:57:0;;15975:2:1;30990:57:0::2;::::0;::::2;15957:21:1::0;16014:2;15994:18;;;15987:30;16053:31;16033:18;;;16026:59;16102:18;;30990:57:0::2;15773:353:1::0;30990:57:0::2;31099:4;3339:7:::0;3366:18;;;;;;;;;;;31066:11:::2;:39;;31058:72;;;::::0;-1:-1:-1;;;31058:72:0;;16333:2:1;31058:72:0::2;::::0;::::2;16315:21:1::0;16372:2;16352:18;;;16345:30;-1:-1:-1;;;16391:18:1;;;16384:50;16451:18;;31058:72:0::2;16131:344:1::0;31058:72:0::2;31149:12;::::0;-1:-1:-1;;;31149:12:0;::::2;;;31141:43;;;::::0;-1:-1:-1;;;31141:43:0;;16682:2:1;31141:43:0::2;::::0;::::2;16664:21:1::0;16721:2;16701:18;;;16694:30;-1:-1:-1;;;16740:18:1;;;16733:48;16798:18;;31141:43:0::2;16480:342:1::0;31141:43:0::2;31230:19;31252:25;31265:11;31252:12;:25::i;:::-;31230:47;;31357:1;31343:11;:15;31335:56;;;::::0;-1:-1:-1;;;31335:56:0;;17029:2:1;31335:56:0::2;::::0;::::2;17011:21:1::0;17068:2;17048:18;;;17041:30;17107;17087:18;;;17080:58;17155:18;;31335:56:0::2;16827:352:1::0;31335:56:0::2;31417:45;::::0;;5859:25:1;;;5915:2;5900:18;;5893:34;;;31417:45:0::2;::::0;5832:18:1;31417:45:0::2;;;;;;;-1:-1:-1::0;;1070:1:0::1;1338:7;:22:::0;30906:564::o;28781:166::-;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;28855:21:0;::::1;28847:36;;;::::0;-1:-1:-1;;;28847:36:0;;17386:2:1;28847:36:0::1;::::0;::::1;17368:21:1::0;17425:1;17405:18;;;17398:29;-1:-1:-1;;;17443:18:1;;;17436:32;17485:18;;28847:36:0::1;17184:325:1::0;28847:36:0::1;28894:16;:45:::0;;-1:-1:-1;;;;;;28894:45:0::1;-1:-1:-1::0;;;;;28894:45:0;;;::::1;::::0;;;::::1;::::0;;28781:166::o;33719:295::-;1820:13;:11;:13::i;:::-;33800:12:::1;::::0;-1:-1:-1;;;33800:12:0;::::1;;;33799:13;33791:43;;;::::0;-1:-1:-1;;;33791:43:0;;17716:2:1;33791:43:0::1;::::0;::::1;17698:21:1::0;17755:2;17735:18;;;17728:30;-1:-1:-1;;;17774:18:1;;;17767:47;17831:18;;33791:43:0::1;17514:341:1::0;33791:43:0::1;-1:-1:-1::0;;;;;33853:24:0;::::1;33845:58;;;::::0;-1:-1:-1;;;33845:58:0;;18062:2:1;33845:58:0::1;::::0;::::1;18044:21:1::0;18101:2;18081:18;;;18074:30;-1:-1:-1;;;18120:18:1;;;18113:51;18181:18;;33845:58:0::1;17860:345:1::0;33845:58:0::1;33914:9;:22:::0;;-1:-1:-1;;;;;;;;;33914:22:0;::::1;::::0;;::::1;33947:19:::0;;;;-1:-1:-1;;;;;;33947:19:0;;;;;;;-1:-1:-1;;;33947:19:0::1;::::0;;;33982:24:::1;::::0;::::1;::::0;-1:-1:-1;;33982:24:0::1;33719:295:::0;:::o;31898:1534::-;1820:13;:11;:13::i;:::-;32006:1:::1;31992:11;:15;31984:30;;;;-1:-1:-1::0;;;31984:30:0::1;;;;;;;:::i;:::-;32033:46;::::0;-1:-1:-1;;;32033:46:0;;32048:4:::1;32033:46;::::0;::::1;2292:51:1::0;;;32083:11:0;;32033:31:::1;::::0;2265:18:1;;32033:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;32025:76;;;::::0;-1:-1:-1;;;32025:76:0;;11239:2:1;32025:76:0::1;::::0;::::1;11221:21:1::0;11278:1;11258:18;;;11251:29;-1:-1:-1;;;11296:18:1;;;11289:32;11338:18;;32025:76:0::1;11037:325:1::0;32025:76:0::1;32184:16;::::0;32152:69:::1;::::0;32169:4:::1;::::0;-1:-1:-1;;;;;32184:16:0::1;-1:-1:-1::0;;32152:8:0::1;:69::i;:::-;32317:21;32289:25;32423;32436:11:::0;32423:12:::1;:25::i;:::-;32401:47;;32473:11;32488:1;32473:16:::0;32469:55:::1;;32506:7;;13032:63;12267:836::o:0;32469:55::-:1;32622:21;32658:39:::0;;::::1;32654:137;;-1:-1:-1::0;;;;;;;;;;;32719:39:0::1;;;;8481:2:1::0;8463:21;;;8520:2;8500:18;;;8493:30;-1:-1:-1;;;8554:2:1;8539:18;;8532:55;8619:2;8604:18;;8279:349;32719:39:0::1;;;;;;;;32773:7;;;13032:63;12267:836::o:0;32654:137::-:1;32855:25;32883:38;32904:17:::0;32883:18;:38:::1;:::i;:::-;32855:66:::0;-1:-1:-1;32972:23:0::1;33034:3;32998:33;9474:2;32855:66:::0;32998:33:::1;:::i;:::-;:39;;;;:::i;:::-;32972:65:::0;-1:-1:-1;33048:21:0::1;33106:3;33072:31;9530:2;33072:17:::0;:31:::1;:::i;:::-;:37;;;;:::i;:::-;33048:61:::0;-1:-1:-1;33168:19:0;;33164:117:::1;;33204:65;33218:15:::0;33265:3:::1;33235:27;9474:2;33235:11:::0;:27:::1;:::i;:::-;:33;;;;:::i;:::-;33204:13;:65::i;:::-;33342:17:::0;;33338:87:::1;;33376:37;33399:13;33376:22;:37::i;:::-;31973:1459;;;;;;31898:1534:::0;:::o;27454:1319::-;1820:13;:11;:13::i;:::-;27564:46:::1;::::0;-1:-1:-1;;;27564:46:0;;27579:4:::1;27564:46;::::0;::::1;2292:51:1::0;;;27542:19:0::1;::::0;27564:31:::1;::::0;2265:18:1;;27564:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27542:68;;27643:1;27629:11;:15;27621:30;;;;-1:-1:-1::0;;;27621:30:0::1;;;;;;;:::i;:::-;27682:1;27670:9;:13;27662:28;;;::::0;-1:-1:-1;;;27662:28:0;;18412:2:1;27662:28:0::1;::::0;::::1;18394:21:1::0;18451:1;18431:18;;;18424:29;-1:-1:-1;;;18469:18:1;;;18462:32;18511:18;;27662:28:0::1;18210:325:1::0;27662:28:0::1;27769:16;::::0;27737:63:::1;::::0;27754:4:::1;::::0;-1:-1:-1;;;;;27769:16:0::1;27788:11:::0;27737:8:::1;:63::i;:::-;27825:16;::::0;-1:-1:-1;;;;;27825:16:0::1;:32;27865:9;27898:4;27918:11:::0;27825:16:::1;::::0;28066:10:::1;28091:21;:15;28109:3;28091:21;:::i;:::-;27825:324;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27825:324:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;27825:324:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;27821:945;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;28302:16;::::0;28270:53:::1;::::0;28287:4:::1;::::0;-1:-1:-1;;;;;28302:16:0::1;;28270:8;:53::i;:::-;28388:51;::::0;28396:10:::1;::::0;28417:21:::1;28388:51:::0;::::1;;;::::0;::::1;::::0;;;28417:21;28396:10;28388:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;27821:945;;;28576:16;::::0;28544:53:::1;::::0;28561:4:::1;::::0;-1:-1:-1;;;;;28576:16:0::1;;28544:8;:53::i;:::-;28662:51;::::0;28670:10:::1;::::0;28691:21:::1;28662:51:::0;::::1;;;::::0;::::1;::::0;;;28691:21;28670:10;28662:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;27821:945;-1:-1:-1::0;;28170:38:0::1;::::0;;5859:25:1;;;28198:9:0::1;5915:2:1::0;5900:18;;5893:34;28170:38:0::1;::::0;-1:-1:-1;5832:18:1;28170:38:0::1;;;;;;;27531:1242;27454:1319::o:0;29912:958::-;1820:13;:11;:13::i;:::-;30047:16:::1;::::0;30015:69:::1;::::0;30032:4:::1;::::0;-1:-1:-1;;;;;30047:16:0::1;-1:-1:-1::0;;30015:8:0::1;:69::i;:::-;30163:10;::::0;30191:16:::1;::::0;30156:72:::1;::::0;-1:-1:-1;;;30156:72:0;;-1:-1:-1;;;;;30163:10:0;;::::1;::::0;30156:26:::1;::::0;:72:::1;::::0;30191:16;::::1;::::0;-1:-1:-1;;30210:17:0;30156:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;30156:72:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;30156:72:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;30152:193:::0;::::1;;-1:-1:-1::0;30267:10:0::1;::::0;30287:16:::1;::::0;30249:75:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;30267:10:0;;::::1;::::0;30287:16;::::1;::::0;-1:-1:-1;;30306:17:0;30249:75:::1;:::i;:::-;;;;;;;;30152:193;30420:13;::::0;-1:-1:-1;;;;;30420:13:0::1;:27:::0;30416:447:::1;;30475:10;::::0;30495:13:::1;::::0;30468:60:::1;::::0;-1:-1:-1;;;30468:60:0;;-1:-1:-1;;;;;30475:10:0;;::::1;::::0;30468:26:::1;::::0;:60:::1;::::0;30495:13;::::1;::::0;-1:-1:-1;;30510:17:0;30468:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;30468:60:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;30468:60:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;30464:177:::0;::::1;;-1:-1:-1::0;30571:10:0::1;::::0;30583:13:::1;::::0;30553:63:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;30571:10:0;;::::1;::::0;30583:13;::::1;::::0;-1:-1:-1;;30598:17:0;30553:63:::1;:::i;:::-;;;;;;;;30464:177;30703:13;::::0;30673:63:::1;::::0;-1:-1:-1;;;30673:63:0;;30688:4:::1;::::0;30673:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;30703:13:0::1;::::0;-1:-1:-1;;30718:17:0;30673:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;30673:63:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;30673:63:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;30669:183:::0;::::1;;-1:-1:-1::0;30794:13:0::1;::::0;30761:66:::1;::::0;::::1;::::0;::::1;::::0;30787:4:::1;::::0;-1:-1:-1;;;;;30794:13:0::1;::::0;-1:-1:-1;;30809:17:0;30761:66:::1;:::i;2064:165::-:0;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;2153:22:0;::::1;2145:37;;;::::0;-1:-1:-1;;;2145:37:0;;19354:2:1;2145:37:0::1;::::0;::::1;19336:21:1::0;19393:1;19373:18;;;19366:29;-1:-1:-1;;;19411:18:1;;;19404:32;19453:18;;2145:37:0::1;19152:325:1::0;2145:37:0::1;2193:28;2212:8;2193:18;:28::i;5119:256::-:0;-1:-1:-1;;;;;5221:19:0;;;;;;:44;;-1:-1:-1;;;;;;5244:21:0;;;;5221:44;5213:59;;;;-1:-1:-1;;;5213:59:0;;19684:2:1;5213:59:0;;;19666:21:1;19723:1;19703:18;;;19696:29;-1:-1:-1;;;19741:18:1;;;19734:32;19783:18;;5213:59:0;19482:325:1;5213:59:0;-1:-1:-1;;;;;5283:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5335:32;;160:25:1;;;5335:32:0;;133:18:1;5335:32:0;;;;;;;5119:256;;;:::o;5383:311::-;-1:-1:-1;;;;;3697:18:0;;;5484:24;3697:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;5555:26;;;;5547:41;;;;-1:-1:-1;;;5547:41:0;;20014:2:1;5547:41:0;;;19996:21:1;20053:1;20033:18;;;20026:29;-1:-1:-1;;;20071:18:1;;;20064:32;20113:18;;5547:41:0;19812:325:1;5547:41:0;5624:51;5633:5;5640:7;5668:6;5649:16;:25;5624:8;:51::i;13111:3438::-;13299:7;;;;;;;13298:8;:41;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;13324:15:0;;;1934:6;;13324:15;;13298:41;:72;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;13357:13:0;;;1934:6;;13357:13;;13298:72;:111;;;;-1:-1:-1;;;;;;13388:21:0;;13404:4;13388:21;;13298:111;:148;;;;-1:-1:-1;13433:13:0;;-1:-1:-1;;;;;13427:19:0;;;13433:13;;13427:19;13298:148;13280:3000;;;13503:17;13543:3;13523:17;9419:1;13523:6;:17;:::i;:::-;:23;;;;:::i;:::-;13503:43;-1:-1:-1;13579:13:0;;13575:2694;;13673:23;13727:3;13699:25;9474:2;13699:9;:25;:::i;:::-;:31;;;;:::i;:::-;13673:57;-1:-1:-1;13749:21:0;13799:3;13773:23;9530:2;13773:9;:23;:::i;:::-;:29;;;;:::i;:::-;13749:53;-1:-1:-1;13897:22:0;13922:18;13931:9;13922:6;:18;:::i;:::-;13897:43;;14020:47;14036:4;14050;14057:9;14020:15;:47::i;:::-;14155:41;14171:4;14177:2;14181:14;14155:15;:41::i;:::-;14311:15;14284:23;;:42;;;;;;;:::i;:::-;;;;;;;;14370:13;14345:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;14786:21:0;;14760:23;;14651:12;;9699:11;;14760:47;;14786:21;14760:47;:::i;:::-;:73;14756:1243;;15009:16;14985:21;;14959:23;;:47;;;;:::i;:::-;:66;14955:1025;;;15258:62;15273:23;;15298:21;;15258:62;;;;;;5859:25:1;;;5915:2;5900:18;;5893:34;5847:2;5832:18;;5685:248;15258:62:0;;;;;;;;14955:1025;;;15463:4;-1:-1:-1;;;;;15463:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15459:498;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;15721:6:0;15710:18;;;;;;:::i;:::-;;;;;;;;15578:178;15459:498;;;;;-1:-1:-1;;;;;;;;;;;15872:57:0;;;;20344:2:1;20326:21;;;20383:2;20363:18;;;20356:30;20422:34;20417:2;20402:18;;20395:62;-1:-1:-1;;;20488:2:1;20473:18;;20466:41;20539:3;20524:19;;20142:407;15459:498:0;16081:57;16095:4;9592:11;16101:15;16111:4;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;16101:15;:36;;16081:13;:57::i;:::-;16157:53;16171:2;9592:11;16175:13;16185:2;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;16157:53;16247:7;;;;;13111:3438;;;:::o;13575:2694::-;13458:2822;13280:3000;16328:33;16344:4;16350:2;16354:6;16328:15;:33::i;:::-;16420:57;16434:4;9592:11;16440:15;16450:4;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;16420:57;16488:53;16502:2;9592:11;16506:13;16516:2;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;1956:100;2031:10;2020:7;1934:6;;-1:-1:-1;;;;;1934:6:0;;1861:87;2020:7;-1:-1:-1;;;;;2020:21:0;;2012:36;;;;-1:-1:-1;;;2012:36:0;;20756:2:1;2012:36:0;;;20738:21:1;20795:1;20775:18;;;20768:29;-1:-1:-1;;;20813:18:1;;;20806:32;20855:18;;2012:36:0;20554:325:1;21461:2497:0;21521:7;21545:11;21560:1;21545:16;21541:30;;-1:-1:-1;21570:1:0;;21461:2497;-1:-1:-1;21461:2497:0:o;21541:30::-;21590:12;;-1:-1:-1;;;21590:12:0;;;;21582:43;;;;-1:-1:-1;;;21582:43:0;;16682:2:1;21582:43:0;;;16664:21:1;16721:2;16701:18;;;16694:30;-1:-1:-1;;;16740:18:1;;;16733:48;16798:18;;21582:43:0;16480:342:1;21582:43:0;21670:16;;;21684:1;21670:16;;;;;;;;21646:21;;21670:16;;;;;;;;;;-1:-1:-1;21670:16:0;21646:40;;21715:4;21697;21702:1;21697:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21697:23:0;;;:7;;;;;;;;;;:23;;;;21741:16;;:23;;;-1:-1:-1;;;21741:23:0;;;;:16;;;;;:21;;:23;;;;;21697:7;;21741:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21731:4;21736:1;21731:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21731:33:0;;;:7;;;;;;;;;:33;22133:16;;21955:20;;22101:63;;22118:4;;22133:16;22152:11;22101:8;:63::i;:::-;22237:16;22256:22;:15;22274:4;22256:22;:::i;:::-;22510:16;;22664:9;;22510:230;;-1:-1:-1;;;22510:230:0;;22237:41;;-1:-1:-1;22384:21:0;;-1:-1:-1;;;;;22510:16:0;;;;:67;;:230;;22592:11;;22618:12;;22645:4;;22664:9;;;;;;;;22237:41;;22510:230;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22506:1445;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;23815:6:0;23804:18;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;23844:1:0;;21461:2497;-1:-1:-1;;;;;;21461:2497:0:o;22506:1445::-;;;-1:-1:-1;;;;;;;;;;;23884:32:0;;;;21797:2:1;21779:21;;;21836:2;21816:18;;;21809:30;-1:-1:-1;;;21870:2:1;21855:18;;21848:48;21928:2;21913:18;;21595:342;23884:32:0;;;;;;;;-1:-1:-1;23938:1:0;;21461:2497;-1:-1:-1;;;;;21461:2497:0:o;22506:1445::-;22862:9;;;;;;;;;-1:-1:-1;;;;;22862:9:0;-1:-1:-1;;;;;22851:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22847:891;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;23558:6:0;23510:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;23510:55:0;;;;;;;;;;23492:75;;;:::i;22847:891::-;;;-1:-1:-1;;;;;;;;;;;23641:54:0;;;;22608:2:1;22590:21;;;22647:2;22627:18;;;22620:30;22686:34;22681:2;22666:18;;22659:62;-1:-1:-1;;;22752:2:1;22737:18;;22730:38;22800:3;22785:19;;22406:404;22847:891:0;22996:21;22967:26;23058:38;23079:17;22996:21;23058:38;:::i;:::-;23036:60;-1:-1:-1;23137:15:0;;23133:285;;23182:40;;;5859:25:1;;;5915:2;5900:18;;5893:34;;;23182:40:0;;5832:18:1;23182:40:0;;;;;;;23252:11;21461:2497;-1:-1:-1;;;;;;;21461:2497:0:o;23133:285::-;-1:-1:-1;;;;;;;;;;;23317:50:0;;;;23017:2:1;22999:21;;;23056:2;23036:18;;;23029:30;23095:34;23090:2;23075:18;;23068:62;-1:-1:-1;;;23161:2:1;23146:18;;23139:34;23205:3;23190:19;;22815:400;23317:50:0;;;;;;;;-1:-1:-1;23397:1:0;;21461:2497;-1:-1:-1;;;;;;;21461:2497:0:o;20625:828::-;20787:22;20849:3;20827:18;20849:3;;20827:18;:::i;:::-;20812:34;;:11;:34;:::i;:::-;:40;;;;:::i;:::-;20787:65;-1:-1:-1;20863:20:0;20921:3;20899:18;20921:3;;20899:18;:::i;:::-;20886:32;;:9;:32;:::i;:::-;:38;;;;:::i;:::-;20949:16;;20863:61;;-1:-1:-1;;;;;;20949:16:0;:32;20989:9;21022:4;21042:11;21068:14;20863:61;21022:4;21152:22;:15;21170:4;21152:22;:::i;:::-;20949:271;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20949:271:0;;;;;;;;-1:-1:-1;;20949:271:0;;;;;;;;;;;;:::i;:::-;;;20945:501;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21346:26;21365:6;21346:26;;;;;;:::i;:::-;;;;;;;;21292:92;20945:501;;;;;21411:23;;;;;24018:2:1;24000:21;;;24057:1;24037:18;;;24030:29;-1:-1:-1;;;24090:2:1;24075:18;;24068:31;24131:2;24116:18;;23816:324;21411:23:0;;;;;;;;20945:501;;;-1:-1:-1;;21241:38:0;;;5859:25:1;;;5915:2;5900:18;;5893:34;;;21241:38:0;;-1:-1:-1;5832:18:1;21241:38:0;5685:248:1;23999:818:0;24089:7;:14;24118:17;;;:32;;-1:-1:-1;24139:11:0;;24118:32;24114:45;;;24152:7;23999:818;:::o;24114:45::-;24179:23;24205:21;24214:12;24205:6;:21;:::i;:::-;24179:47;;24241:15;24260:1;24241:20;24237:33;;24263:7;;23999:818;:::o;24237:33::-;24295:9;24290:454;24314:12;24310:1;:16;24290:454;;;24348:14;24365:7;24373:1;24365:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24365:10:0;;-1:-1:-1;24394:20:0;;;;;:47;;-1:-1:-1;;;;;;24418:23:0;;24436:4;24418:23;;24394:47;:74;;;;-1:-1:-1;24455:13:0;;-1:-1:-1;;;;;24445:23:0;;;24455:13;;24445:23;;24394:74;24390:343;;;24544:12;24562:6;-1:-1:-1;;;;;24562:11:0;24581:15;24562:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24543:58;;;24625:7;24620:98;;24662:36;;;;;24557:2:1;24539:21;;;24596:2;24576:18;;;24569:30;-1:-1:-1;;;24630:2:1;24615:18;;24608:49;24689:2;24674:18;;24355:343;24662:36:0;;;;;;;;24620:98;24470:263;24390:343;-1:-1:-1;24328:3:0;;;;:::i;:::-;;;;24290:454;;;-1:-1:-1;24769:40:0;;;5859:25:1;;;5915:2;5900:18;;5893:34;;;24769:40:0;;5832:18:1;24769:40:0;;;;;;;24055:762;;23999:818;:::o;2237:191::-;2330:6;;;-1:-1:-1;;;;;2347:17:0;;;-1:-1:-1;;;;;;2347:17:0;;;;;;;2380:40;;2330:6;;;2347:17;2330:6;;2380:40;;2311:16;;2380:40;2300:128;2237:191;:::o;4196:507::-;-1:-1:-1;;;;;4293:18:0;;;;;;:38;;-1:-1:-1;;;;;;4315:16:0;;;;4293:38;4285:53;;;;-1:-1:-1;;;4285:53:0;;25045:2:1;4285:53:0;;;25027:21:1;25084:1;25064:18;;;25057:29;-1:-1:-1;;;25102:18:1;;;25095:32;25144:18;;4285:53:0;24843:325:1;4285:53:0;-1:-1:-1;;;;;4420:15:0;;4398:19;4420:15;;;;;;;;;;;4454:21;;;;4446:36;;;;-1:-1:-1;;;4446:36:0;;25375:2:1;4446:36:0;;;25357:21:1;25414:1;25394:18;;;25387:29;-1:-1:-1;;;25432:18:1;;;25425:32;25474:18;;4446:36:0;25173:325:1;4446:36:0;-1:-1:-1;;;;;4518:15:0;;;:9;:15;;;;;;;;;;;4536:20;;;4518:38;;4571:13;;;;;;;;;;:23;;;;;;4621:26;;160:25:1;;;4571:13:0;;4621:26;;133:18:1;4621:26:0;;;;;;;4658:37;28955:183;16557:779;16652:13;;-1:-1:-1;;;;;16641:24:0;;;16652:13;;16641:24;;;;:52;;-1:-1:-1;;;;;;16669:24:0;;16688:4;16669:24;;16641:52;16637:692;;;16714:14;:36;;;;-1:-1:-1;;;;;;16733:17:0;;;;;;:8;:17;;;;;;;;16732:18;16714:36;16710:608;;;-1:-1:-1;;;;;;16771:17:0;;;;;:8;:17;;;;;:24;;-1:-1:-1;;16771:24:0;16791:4;16771:24;;;;;;16814:7;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;16814:21:0;;;;;;16557:779::o;16710:608::-;16862:14;16861:15;:36;;;;-1:-1:-1;;;;;;16880:17:0;;;;;;:8;:17;;;;;;;;16861:36;16857:461;;;-1:-1:-1;;;;;16918:17:0;;16938:5;16918:17;;;:8;:17;;;;;:25;;-1:-1:-1;;16918:25:0;;;17026:277;17050:7;:14;17046:18;;17026:277;;;17112:7;-1:-1:-1;;;;;17098:21:0;:7;17106:1;17098:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;17098:10:0;:21;17094:190;;17161:7;17169:14;;:18;;17186:1;;17169:18;:::i;:::-;17161:27;;;;;;;;:::i;:::-;;;;;;;;;;;17148:7;:10;;-1:-1:-1;;;;;17161:27:0;;;;17156:1;;17148:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;17148:40:0;;;;;-1:-1:-1;;;;;17148:40:0;;;;;;17215:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;17215:13:0;;;;;-1:-1:-1;;;;;;17215:13:0;;;;;;29089:41:::1;28955:183:::0;;:::o;17094:190::-;17066:3;;;;:::i;:::-;;;;17026:277;;16857:461;16557:779;;:::o;196:250:1:-;281:1;291:113;305:6;302:1;299:13;291:113;;;381:11;;;375:18;362:11;;;355:39;327:2;320:10;291:113;;;-1:-1:-1;;438:1:1;420:16;;413:27;196:250::o;451:396::-;600:2;589:9;582:21;563:4;632:6;626:13;675:6;670:2;659:9;655:18;648:34;691:79;763:6;758:2;747:9;743:18;738:2;730:6;726:15;691:79;:::i;:::-;831:2;810:15;-1:-1:-1;;806:29:1;791:45;;;;838:2;787:54;;451:396;-1:-1:-1;;451:396:1:o;852:131::-;-1:-1:-1;;;;;927:31:1;;917:42;;907:70;;973:1;970;963:12;988:315;1056:6;1064;1117:2;1105:9;1096:7;1092:23;1088:32;1085:52;;;1133:1;1130;1123:12;1085:52;1172:9;1159:23;1191:31;1216:5;1191:31;:::i;:::-;1241:5;1293:2;1278:18;;;;1265:32;;-1:-1:-1;;;988:315:1:o;1500:456::-;1577:6;1585;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;-1:-1:-1;1827:2:1;1812:18;;1799:32;1840:33;1799:32;1840:33;:::i;:::-;1500:456;;1892:7;;-1:-1:-1;;;1946:2:1;1931:18;;;;1918:32;;1500:456::o;1961:180::-;2020:6;2073:2;2061:9;2052:7;2048:23;2044:32;2041:52;;;2089:1;2086;2079:12;2041:52;-1:-1:-1;2112:23:1;;1961:180;-1:-1:-1;1961:180:1:o;2543:461::-;2596:3;2634:5;2628:12;2661:6;2656:3;2649:19;2687:4;2716:2;2711:3;2707:12;2700:19;;2753:2;2746:5;2742:14;2774:1;2784:195;2798:6;2795:1;2792:13;2784:195;;;2863:13;;-1:-1:-1;;;;;2859:39:1;2847:52;;2919:12;;;;2954:15;;;;2895:1;2813:9;2784:195;;;-1:-1:-1;2995:3:1;;2543:461;-1:-1:-1;;;;;2543:461:1:o;3009:261::-;3188:2;3177:9;3170:21;3151:4;3208:56;3260:2;3249:9;3245:18;3237:6;3208:56;:::i;:::-;3200:64;3009:261;-1:-1:-1;;;3009:261:1:o;3508:247::-;3567:6;3620:2;3608:9;3599:7;3595:23;3591:32;3588:52;;;3636:1;3633;3626:12;3588:52;3675:9;3662:23;3694:31;3719:5;3694:31;:::i;3760:248::-;3828:6;3836;3889:2;3877:9;3868:7;3864:23;3860:32;3857:52;;;3905:1;3902;3895:12;3857:52;-1:-1:-1;;3928:23:1;;;3998:2;3983:18;;;3970:32;;-1:-1:-1;3760:248:1:o;4013:388::-;4081:6;4089;4142:2;4130:9;4121:7;4117:23;4113:32;4110:52;;;4158:1;4155;4148:12;4110:52;4197:9;4184:23;4216:31;4241:5;4216:31;:::i;:::-;4266:5;-1:-1:-1;4323:2:1;4308:18;;4295:32;4336:33;4295:32;4336:33;:::i;:::-;4388:7;4378:17;;;4013:388;;;;;:::o;4640:380::-;4719:1;4715:12;;;;4762;;;4783:61;;4837:4;4829:6;4825:17;4815:27;;4783:61;4890:2;4882:6;4879:14;4859:18;4856:38;4853:161;;4936:10;4931:3;4927:20;4924:1;4917:31;4971:4;4968:1;4961:15;4999:4;4996:1;4989:15;4853:161;;4640:380;;;:::o;6268:274::-;-1:-1:-1;;;;;6460:32:1;;;;6442:51;;6524:2;6509:18;;6502:34;6430:2;6415:18;;6268:274::o;6547:277::-;6614:6;6667:2;6655:9;6646:7;6642:23;6638:32;6635:52;;;6683:1;6680;6673:12;6635:52;6715:9;6709:16;6768:5;6761:13;6754:21;6747:5;6744:32;6734:60;;6790:1;6787;6780:12;7489:127;7550:10;7545:3;7541:20;7538:1;7531:31;7581:4;7578:1;7571:15;7605:4;7602:1;7595:15;7621:125;7686:9;;;7707:10;;;7704:36;;;7720:18;;:::i;7751:168::-;7824:9;;;7855;;7872:15;;;7866:22;;7852:37;7842:71;;7893:18;;:::i;7924:217::-;7964:1;7990;7980:132;;8034:10;8029:3;8025:20;8022:1;8015:31;8069:4;8066:1;8059:15;8097:4;8094:1;8087:15;7980:132;-1:-1:-1;8126:9:1;;7924:217::o;8146:128::-;8213:9;;;8234:11;;;8231:37;;;8248:18;;:::i;9272:251::-;9342:6;9395:2;9383:9;9374:7;9370:23;9366:32;9363:52;;;9411:1;9408;9401:12;9363:52;9443:9;9437:16;9462:31;9487:5;9462:31;:::i;10188:325::-;10390:2;10372:21;;;10429:1;10409:18;;;10402:29;-1:-1:-1;;;10462:2:1;10447:18;;10440:32;10504:2;10489:18;;10188:325::o;10848:184::-;10918:6;10971:2;10959:9;10950:7;10946:23;10942:32;10939:52;;;10987:1;10984;10977:12;10939:52;-1:-1:-1;11010:16:1;;10848:184;-1:-1:-1;10848:184:1:o;11697:375::-;-1:-1:-1;;;;;11955:15:1;;;11937:34;;12007:15;;;;12002:2;11987:18;;11980:43;12054:2;12039:18;;12032:34;;;;11887:2;11872:18;;11697:375::o;13172:306::-;13260:6;13268;13276;13329:2;13317:9;13308:7;13304:23;13300:32;13297:52;;;13345:1;13342;13335:12;13297:52;13374:9;13368:16;13358:26;;13424:2;13413:9;13409:18;13403:25;13393:35;;13468:2;13457:9;13453:18;13447:25;13437:35;;13172:306;;;;;:::o;13483:179::-;13518:3;13560:1;13542:16;13539:23;13536:120;;;13606:1;13603;13600;13585:23;-1:-1:-1;13643:1:1;13637:8;13632:3;13628:18;13536:120;13483:179;:::o;13799:346::-;13909:2;13890:13;;-1:-1:-1;;13886:27:1;13874:40;;13944:18;13929:34;;13965:22;;;13926:62;13923:185;;;14030:10;14025:3;14021:20;14018:1;14011:31;14065:4;14062:1;14055:15;14093:4;14090:1;14083:15;13923:185;14124:2;14117:22;-1:-1:-1;;13799:346:1:o;14150:671::-;14189:3;14231:4;14213:16;14210:26;14207:39;;;14150:671;:::o;14207:39::-;14273:2;14267:9;-1:-1:-1;;14338:16:1;14334:25;;14331:1;14267:9;14310:50;14389:4;14383:11;14413:16;14448:18;14519:2;14512:4;14504:6;14500:17;14497:25;14492:2;14484:6;14481:14;14478:45;14475:58;;;14526:5;;;;;14150:671;:::o;14475:58::-;14563:6;14557:4;14553:17;14542:28;;14599:3;14593:10;14626:2;14618:6;14615:14;14612:27;;;14632:5;;;;;;14150:671;:::o;14612:27::-;14716:2;14697:16;14691:4;14687:27;14683:36;14676:4;14667:6;14662:3;14658:16;14654:27;14651:69;14648:82;;;14723:5;;;;;;14150:671;:::o;14648:82::-;14739:57;14790:4;14781:6;14773;14769:19;14765:30;14759:4;14739:57;:::i;:::-;-1:-1:-1;14812:3:1;;14150:671;-1:-1:-1;;;;;14150:671:1:o;18540:607::-;-1:-1:-1;;;;;18899:15:1;;;18881:34;;18946:2;18931:18;;18924:34;;;;18989:2;18974:18;;18967:34;;;;19032:2;19017:18;;19010:34;;;;19081:15;;;19075:3;19060:19;;19053:44;18861:3;19113:19;;19106:35;;;;18830:3;18815:19;;18540:607::o;20884:127::-;20945:10;20940:3;20936:20;20933:1;20926:31;20976:4;20973:1;20966:15;21000:4;20997:1;20990:15;21016:574;21307:6;21296:9;21289:25;21350:6;21345:2;21334:9;21330:18;21323:34;21393:3;21388:2;21377:9;21373:18;21366:31;21270:4;21414:57;21466:3;21455:9;21451:19;21443:6;21414:57;:::i;:::-;-1:-1:-1;;;;;21507:32:1;;;;21502:2;21487:18;;21480:60;-1:-1:-1;21571:3:1;21556:19;21549:35;21406:65;21016:574;-1:-1:-1;;;21016:574:1:o;21942:459::-;22204:29;22199:3;22192:42;22174:3;22263:6;22257:13;22279:75;22347:6;22342:2;22337:3;22333:12;22326:4;22318:6;22314:17;22279:75;:::i;:::-;22374:16;;;;22392:2;22370:25;;21942:459;-1:-1:-1;;21942:459:1:o;24703:135::-;24742:3;24763:17;;;24760:43;;24783:18;;:::i;:::-;-1:-1:-1;24830:1:1;24819:13;;24703:135::o;25503:127::-;25564:10;25559:3;25555:20;25552:1;25545:31;25595:4;25592:1;25585:15;25619:4;25616:1;25609:15
Swarm Source
ipfs://dcccce511dbf033d9a4453a402fa85a2ef860ab5f7bc85d41e1ec0fdb873e7b1
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.